Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » new liefert 0 zurück obwohl genügend Speicher da ist

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
21.03.2007, 15:33 Uhr
~fehlersuchen
Gast


Hallo zusammen,

ich will innerhalb eines Programms einen 4k-Block mit new (oder malloc, ist egal)
reservieren.
new oder malloc liefern aber immer 0 zurück.
Wenn ich an der selben Stelle weniger Speicher reservieren will klappt es.
Laut Taskmanager ist mein Speicher nicht ausgelastet.
Wenn ich ganz am Anfang des Programms eine Schleife mache, die einfach Speicher alloziert, kann ich problemlos GB-weise mein RAM füllen.

Hat jemand eine Idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.03.2007, 16:04 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
zeig mal Code.
Ansonsten wenn du malloc benutzt - lass dir per strerror(errno) den Fehler ausgeben
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.03.2007, 18:20 Uhr
~fehlersuchen
Gast


Hallo,
die Fehlerfunktion liefert "No error".
Der Code würde nicht viel helfen, ist ein normales new.
Es sieht so aus, als würde ihm der Speicher ausgehen. Hab mal ein paar Tests gemacht.
Ich glaube aber, dass er in der Release-Version das noch macht.
Hat jemand eine Idee, ob es Heap-Grenzen gibt und wie die Einstellbar sind?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.03.2007, 18:50 Uhr
~fehlersuchen
Gast


Hab jetzt sogar ein bisschen Code für euch:

Wenn ich den auskommentierten Code auskommentiere kann ich an allen Stellen soviel Speicher haben wie ich will. Wenn ich ihn drin lasse geht die nächste größere allozierung schief:

C++:
for (z=0; z<data->bandCount; z++)       // Durchlaufe alle Frequenzbänder
    {
        for (j=0; j<data->band[z].LDAITSteps; j++)  // Durchlaufe alle Frequenzen
        {
            for (i=0; i<data->ldait_PCount; i++)       // Durchlaufe alle Pegel
            {
                
                void *test =element2D(data->ldait, l, i) ;
                /*  // ARG!!
                ((MPOINT*) (test))->frequency =

                    data->band[z].fLO +
                    j*(data->band[z].fHI - data->band[z].fLO) / (data->band[z].LDAITSteps - 1);
                
                ((MPOINT*) (element2D(data->ldait, l, i)))->level =
                    data->dynrange.pLO +
                    i*(data->dynrange.pHI - data->dynrange.pLO) / (data->dynrange.LDAITSteps - 1);
                */

            }
            l++;
        }
    }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.03.2007, 22:35 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wie sieht denn deine element2D-Funktion aus, evtl schreibst du auch einfach deinen Heap kaputt (C-Casts sind halt immer gefährlich)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.03.2007, 17:10 Uhr
~fehlersuchen
Gast


Hallo,

hab den Fehler beseitigt.
Ich habe ein paar Byte über ein Array rausgeschrieben, wahrscheinlich ist dabei Verwaltungsinformation des Heaps flöten gegangen.
Danach hat er gemeint, er hätte keinen Speicher mehr.

Gruß!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


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: