Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Heap beschädigt?!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.09.2007, 17:15 Uhr
xXx
Devil


Seid ich folgendes drin hab:

C++:
std::vector< graphic::resolution_t > resolutions;
graphic::Direct3D::instance().get_supported_resulution(resolutions);

=>
C++:
typedef std::pair<std::size_t, std::size_t>    resolution_t;

=>
C++:
void Direct3D::get_supported_resolution(std::vector< resolution_t > & data)
{
    data.clear();
    D3DDISPLAYMODE mode;
    std::size_t count(m_lpDirect3D->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8));
    for (std::size_t i = 0; i < count; ++i)
    {
        m_lpDirect3D->EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, static_cast<UINT>(i), &mode);
        resolution_t cur(std::make_pair(mode.Width, mode.Height));
        if (cur.first >= 800 && cur.second >= 600 && std::find(data.begin(), data.end(), cur) == data.end())
            data.push_back(cur);
    }
}
Bekomme ich beim Verlassen der Funktion, die den 1. Snippet aufruft, immer eine Exception um die Ohren ... vom Destruktor von resolutions ?! Jemand eine Idee woran das liegen könnte?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.09.2007, 17:28 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



C++:
std::vector< graphic::resolution_t > resolutions;
graphic::Direct3D::instance().get_supported_resulution(resolutions);



einerseits singleton benutzen und dann resolutions als globale var??? ansonsten schau doch mit dem debugger mal genau an welcher stelle er genau abstürzt, evtl wird der heap schon vorher irgendwo korrupiert, wirkt sich aber halt evtl genau an der stelle aus
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.09.2007, 19:19 Uhr
xXx
Devil


hmm ... ne der Codesnippet ist in einer Funktion(beim initialisieren des Konfigurationsprogramms) ...
Hmm ... danach kommt folgendes:

C++:
for (std::size_t i = 0; i < resolutions.size(); ++i)
{
    std::wostringstream ss;
    ss << std::setw(4) << std::setfill(L' ') << resolutions.at(i).first << L" * " << std::setw(4) << std::setfill(L' ') << resolutions.at(i).second << std::endl;
    m_wndComboResolution.add_item(ss.str());
}
und wenn ich es mir mitm debugger angucke, stehen in ss, hinter den korrekten Werten, noch chinesische Zeichen ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.09.2007, 16:53 Uhr
Tron



Moin,

Falls die find()-Funktion nichts passendes findet, liefert sie npos zurück, in diesem Fall
(illegale Zeigerposition). Wird npos später verwendet, wird eine out_of_range Ausnahme ausgelöst.

Falls der Zugriff der at()-Funktion außerhalb des Indexbereich liegt wird ebenfalls eine
out_of_range Ausnahme ausgelöst.

Vielleicht ist es ja sowas in der Art.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.09.2007, 17:21 Uhr
xXx
Devil


Thx für reply

Zitat:
Falls der Zugriff der at()-Funktion außerhalb des Indexbereich liegt wird ebenfalls eine
out_of_range Ausnahme ausgelöst.
Ehm nein. Ich gehe von 0 bis std::vector::size durch Da kann es nicht out_of_range sein


Zitat:
Falls die find()-Funktion nichts passendes findet, liefert sie npos zurück, in diesem Fall
(illegale Zeigerposition). Wird npos später verwendet, wird eine out_of_range Ausnahme ausgelöst.
http://www.cplusplus.com/reference/algorithm/find.html ...

also von daher sollte der Code korrekt sein ... noch ne Idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.09.2007, 19:40 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von xXx:

also von daher sollte der Code korrekt sein ... noch ne Idee?

Es liegt woanders
kontrollier alle teile wo du mit arrayindezes (die keine exception schmeißen wie .at) arbeitest, alle new/deletes und die zugriffe auf die jeweiligen - evtl schreibst du irgendwo anders genau da hin wo er dann da dann abschmiert. oder kompilier mit crtdbg und memory-debugging (oder las purify mal über die debugversion drüber laufen)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.09.2007, 20:37 Uhr
xXx
Devil


Hmm das komische ist nur ... hab das in einer etwas größeren Solution, die aus mehreren Projekten besteht... dann hab ich die Funktion mal aus ner anderen Klasse heraus aufgerufen ... auch da kackt er auf einmal ab, wenn ich die get_supported_resolution-Funktion aufrufe ... etwas komisch ... deswegen denke ich eig. das es nicht am anderen Code liegt Aber ich lasse mich gerne eines besseren belehren ... vllt hilft mir ja PC-Lint für so nen Fall... mal gucken
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: