C realloc断言
C realloc assertion
不确定为什么在尝试使用 realloc 时出现以下错误:
malloc.c:2401: sysmalloc: 断言`(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0) ' 失败的。
已中止(核心已转储)
这是代码片段
#include <stdio.h>
#include <stdint.h>
typedef struct myStruct {
char *pt;
Uint32 tid;
} myStruct;
#define BUCKETSIZE 1024
int main(int argc, char* args[])
{
myStruct *myStructs;
size_t nstructs = 0, maxstructs = 0;
maxstructs = BUCKETSIZE;
myStructs = (myStruct*)malloc(maxstructs * sizeof(myStruct));
memset(myStructs, 0, BUCKETSIZE * sizeof(myStruct));
for(nstructs = 0 ; nstructs < 10240 ; nstructs++)
{
if (nstructs > maxstructs)
{
size_t newsize = (maxstructs + BUCKETSIZE) * sizeof(myStruct);
myStructs = (myStruct*)realloc(myStructs, newsize);
memset((uint8_t*)myStructs + maxstructs * sizeof(myStruct), 0, BUCKETSIZE * sizeof(myStruct));
maxstructs += BUCKETSIZE;
}
myStructs[nstructs].pt = args[0];
myStructs[nstructs].tid = nstructs+1;
}
return 0;
}
在您的循环中,您检查 nstructs > maxstructs
,因此当 nstructs==1024
和 maxstructs==1024
时,您不 realloc
,而是访问 myStructs[1024]
,这是一个过去的结束。您的测试条件需要 nstructs>=maxstructs
。
不确定为什么在尝试使用 realloc 时出现以下错误:
malloc.c:2401: sysmalloc: 断言`(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0) ' 失败的。 已中止(核心已转储)
这是代码片段
#include <stdio.h>
#include <stdint.h>
typedef struct myStruct {
char *pt;
Uint32 tid;
} myStruct;
#define BUCKETSIZE 1024
int main(int argc, char* args[])
{
myStruct *myStructs;
size_t nstructs = 0, maxstructs = 0;
maxstructs = BUCKETSIZE;
myStructs = (myStruct*)malloc(maxstructs * sizeof(myStruct));
memset(myStructs, 0, BUCKETSIZE * sizeof(myStruct));
for(nstructs = 0 ; nstructs < 10240 ; nstructs++)
{
if (nstructs > maxstructs)
{
size_t newsize = (maxstructs + BUCKETSIZE) * sizeof(myStruct);
myStructs = (myStruct*)realloc(myStructs, newsize);
memset((uint8_t*)myStructs + maxstructs * sizeof(myStruct), 0, BUCKETSIZE * sizeof(myStruct));
maxstructs += BUCKETSIZE;
}
myStructs[nstructs].pt = args[0];
myStructs[nstructs].tid = nstructs+1;
}
return 0;
}
在您的循环中,您检查 nstructs > maxstructs
,因此当 nstructs==1024
和 maxstructs==1024
时,您不 realloc
,而是访问 myStructs[1024]
,这是一个过去的结束。您的测试条件需要 nstructs>=maxstructs
。