【问题标题】:C realloc assertionC realloc 断言
【发布时间】:2019-02-19 00:58:47
【问题描述】:

不知道为什么我在尝试使用 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】:

    在您的循环中,您检查nstructs &gt; maxstructs,因此当nstructs==1024maxstructs==1024 时,您不使用realloc,而是访问myStructs[1024],这是一个结束。您的测试条件中需要nstructs&gt;=maxstructs

    【讨论】:

      猜你喜欢
      • 2012-06-07
      • 2015-07-20
      • 1970-01-01
      • 2013-07-14
      • 2017-04-04
      • 1970-01-01
      • 2018-09-25
      相关资源
      最近更新 更多