我使用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
}
它在调试模式下运行良好。
答案 0 :(得分:0)
对于memory leak
,可能会出现Malloc
问题,因为它在Debug中运行一次很好,但是当你保持应用程序运行时间更长时它会崩溃。
使用后free
你buffer
了吗?
答案 1 :(得分:0)
原因很简单。您分配了fileSize
个字节的缓冲区,但是在读取文件之后,使用buffer[fileSize] = 0;
修正:将分配分配大一倍。
buffer = (char *)malloc(fileSize + 1);
Debug使用其他字节构建填充内存分配,因此不会崩溃。