为什么在为结构体分配内存时 malloc 会抛出“corrupted top size”错误?

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

我有一个正在使用的结构,并且我编写了一个方法来创建和初始化它。当我为结构分配内存时,该方法会引发损坏的顶部大小错误。这是该结构的代码:

typedef struct Job {
  int id;
  int cpuBurst;
  int ioBurst;
  int repetitions;
  int priority;
  int startTime;
  int endTime;
  int waitTime;
}Job;

以及方法:

Job * createJob(int id, int cpuBurst, int ioBurst, int repetitions, int priority) {
  Job *job = (Job *) malloc(sizeof(Job));
  job->id = id;
  job->cpuBurst = cpuBurst;
  job->ioBurst = ioBurst;
  job->repetitions = repetitions;
  job->priority = priority;
  job->startTime = -1;
  job->endTime = -1;
  job->waitTime = 0;
  
  return job;
}

Job *job = (Job *) malloc(sizeof(Job));
抛出错误。

我四处寻找类似的问题,但我能找到的所有问题都与缓冲区溢出有关,我不认为这是我的问题,因为我没有使用缓冲区。

c memory-management malloc
1个回答
0
投票

该错误(损坏的顶部大小)是在您进行 malloc 调用之前,如果某些内容已经

已经
损坏了堆,则会出现这种错误。

您可能需要查看 other 代码才能找出原因。

顺便说一句,你不应该在 C 中显式转换

malloc
的返回值,这是没有必要的,而且它可能会隐藏某些微妙的错误。

在尝试使用它之前,您应该一定将返回值与

NULL
进行比较。

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