2017-07-31 12 views
0

私はrapidJsonを使用してjsonデータを読み取りました。デバッグモードとリリースモードの両方でアプリケーションをビルドできますが、アプリケーションはリリースモードでクラッシュします。rapidJson:リリースモードでクラッシュしました

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); 

リリースモードで実行すると、Unhanded exception; A heap has been corruptedが発生します。 malloc.cファイル内"res = _heap_alloc(size)のアプリケーションブレークは

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 
    } 

これは、デバッグモードで細かい実行されます。

答えて

0

Mallocで問題が発生する可能性があります(デバッグ時に一度正常に動作するため)。アプリケーションを長くするとクラッシュします。

は、あなたがそれを使用した後、あなたのbufferfreeていますか?

関連する問題