2017-07-31 3 views
0

J'ai utilisé rapidJson pour lire des données json. Je peux construire mon application en mode Debug et Release, mais l'application se bloque en mode Release.rapidJson: écrasé en mode de libération

using namespace rapidjson; 
    ... 
    char *buffer; 
    long fileSize; 
    size_t fileReadingResult; 

    //obtain file size 
    fseek(pFile, 0, SEEK_END); 
    fileSize = ftell(pFile); 
    if (fileSize <= 0) return false; 
    rewind(pFile); 

    //allocate memory to contain the whole file 
    buffer = (char *)malloc(sizeof(char)*fileSize); 
    if (buffer == NULL) return false; 

    //copy the file into the buffer 
    fileReadingResult = fread(buffer, 1, fileSize, pFile); 
    if (fileReadingResult != fileSize) return false; 
    buffer[fileSize] = 0; 

    Document document; 
    document.Parse(buffer); 

Quand je lance en mode de sortie, je rencontre un Unhanded exception; A heap has been corrupted. Les pauses d'application à "res = _heap_alloc(size) dans malloc.c fichier

void * __cdecl _malloc_base (size_t size) 
{ 
    void *res = NULL; 

// validate size 
if (size <= _HEAP_MAXREQ) { 
    for (;;) { 

     // allocate memory block 
     res = _heap_alloc(size); 

     // if successful allocation, return pointer to memory 
     // if new handling turned off altogether, return NULL 

     if (res != NULL) 
     { 
      break; 
     } 
     if (_newmode == 0) 
     { 
      errno = ENOMEM; 
      break; 
     } 

     // call installed new handler 
     if (!_callnewh(size)) 
      break; 

     // new handler was successful -- try to allocate again 
    } 

Il fonctionne très bien en mode débogage.

Répondre

0

Peut-être que cela pourrait être un memory leak problème avec votre Malloc car il s'exécute bien une fois dans Debug, mais lorsque vous maintenez l'application plus longtemps, il se bloque.

Avez-vous free votre buffer après l'avoir utilisé?