首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C realloc断言

C realloc断言
EN

Stack Overflow用户
提问于 2018-09-14 08:42:44
回答 1查看 239关注 0票数 0

不确定为什么在尝试使用realloc时会出现以下错误:

malloc.c:2401: sysmalloc:断言‘(old_top == initial_top (av) & old_size == 0)连体((未签名) (old_size) >= MINSIZE & prev_inuse (old_top) &((未签名) old_end & (pagesize -1) == 0)“失败。中止(核心倾弃)

下面是代码片段

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-14 08:47:29

在您的循环中,您检查nstructs > maxstructs,所以当nstructs==1024maxstructs==1024时,不需要realloc,而是access myStructs[1024],这已经过了一步。您需要在测试条件下使用nstructs>=maxstructs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52328141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档