我使用rapidJson读取json数据。我可以在Debug和Release模式下构建应用程序,但是在Release模式下应用程序崩溃。

    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
该应用程序在"res = _heap_alloc(size)文件中的malloc.c处中断
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
    }

它在调试模式下运行良好。

最佳答案

可能是您的memory leak出现了Malloc问题,因为它在Debug中运行良好,但是当您保持应用程序运行时间更长时,它就会崩溃。

使用后,您是否对自己的free进行buffer编码?

关于crash - RapidJson:在 Release模式下崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45425217/

10-12 14:43