EAccessViolation bei new



  • hallo leute

    bei meinem vector bekomme ich nach 300´000 - 400´000 push_backs ne exception:

    Im Projekt demo.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00401D89 in Modul 'demo.exe'. Schreiben von Adresse 00C91890.' Prozeß wurde angehalten. Mit Einzelnen Anweißungen und Start fortsetzen.
    

    das kommt an folgender stelle *:

    object& push_back(const object &t_object)
       {
          CheckFreeMemory();
          if(&data[vec_size] >= data && &data[vec_size] < (data + mem_size)) // (1)
             return *(new (&data[vec_size++]) object(t_object)); //(*)
       }
    

    (1) hab ich nur mal zur ueberpruefung drinnen, damit ich weiß, das dort auch wirklich reservierter speicher vorhanden ist.

    sieht da jemand einen fehler ?

    Meep Meep



  • *(new (&data[vec_size++])
    

    hack



  • beleidiger schrieb:

    *(new (&data[vec_size++])
    

    hack

    ???

    bitte uebersetzen

    Meep Meep



  • Meep Meep schrieb:

    bei meinem vector bekomme ich nach 300´000 - 400´000 push_backs ne exception

    Evtl hast du nach so vielen push_backs keinen Speicher mehr in data zur Verfügung?

    btw:
    Warum so kompliziert?

    Meep Meep schrieb:

    if(&data[vec_size] >= data && &data[vec_size] < (data + mem_size)) // (1)
    

    Genauso gut kannst du schreiben

    if(vec_size >= 0 && vec_size < mem_size) // (1)
    

    @beleidiger
    Dir ist schon klar, dass hier kein dynamischer Speicher angefordert wird, sondern placement new verwendet wird?



  • hi groovemaster

    das genug speicher zur verfuegung steht, dafuer sorgt meine speicherverwaltung. deshalb auch die abfrage der adresse die new zugewiesen bekommt. data ist anfangsadresse des speicherblocks und data + mem_size das ende.

    Meep Meep



  • Meep Meep schrieb:

    das genug speicher zur verfuegung steht, dafuer sorgt meine speicherverwaltung

    Dann liegt dein Fehler vermutlich dort. Bekommst du denn mit Zeile (1) auch die Exception?



  • re

    ja mit zeile (1) bekomme ich sie genau so.
    die speicherverwaltung hat da meines wissens keinen fehler drinnen. die verwende ich auch fuer stack, ringbuffer und string. da gabs noch nie ein prob.

    Meep Meep



  • Meep Meep schrieb:

    die speicherverwaltung hat da meines wissens keinen fehler drinnen. die verwende ich auch fuer stack, ringbuffer und string. da gabs noch nie ein prob.

    Das muss nicht unbedingt was heissen, vielleicht ist der Fehler nur noch nie zum Vorschein gekommen. Ohne deine Speicherverwaltung zu kennen, kann man jedenfalls nicht viel mehr dazu sagen.


Anmelden zum Antworten