C realloc断言

问题描述 投票:0回答:1

不知道为什么我在尝试使用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;
}
linux gcc realloc
1个回答
0
投票

在你的循环中,你检查nstructs > maxstructs,所以当nstructs==1024maxstructs==1024,你没有realloc,但访问myStructs[1024],这是一个结束。在测试条件下你需要nstructs>=maxstructs

© www.soinside.com 2019 - 2024. All rights reserved.