释放指针数组时出现堆块错误 [已关闭]

Heap block error while freeing a pointer array [closed]

提问人:Francesco 提问时间:2/1/2023 更新时间:2/1/2023 访问量:51

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

10个月前关闭。

我编写了这个程序,它基本上使用指针分配字符矩阵。 代码如下:

char **bitmap;

void create_bitmap() {
  int i;
  int columns = (int) ceil(m / 8) + 1;
  bitmap = (char **) malloc(sizeof(char) * n);

  for (i = 0; i < n; i++)
    bitmap[i] = (char *) calloc(columns, sizeof(char));
}

void free_bitmap() {
  int i;

  for (i = 0; i < n; i++) {
    free(bitmap[i]);
  }

  free(bitmap);
}

堆块错误在 free_bitmap() 过程的最后一条指令中出现。 我只是无法弄清楚是什么触发了错误。 提前致谢。

C Matrix 内存管理 malloc free

评论

2赞 Gerhardh 2/1/2023
malloc(sizeof(char) * n); => malloc(sizeof(char *) * n);
0赞 Oka 2/1/2023
题外话:我会投射 malloc 的结果吗?
0赞 Bodo 2/1/2023
您的代码不完整。请编辑您的问题并显示一个最小的可重现示例。另请参阅 airbus-seclab.github.io/c-compiler-security

答:

1赞 Francesco 2/1/2023 #1

错误很简单,我想这是我今天早上没有集中注意力的最后证据。

在过程 create_bitmap() 中,malloc 指令应该写成:

bitmap = (char **) malloc(sizeof(char *) * n);

现在,此指令将分配 n 个 char* 指针,而不仅仅是一个 char。 赦。