【问题标题】:munmap_chunk():invalid pointermunmap_chunk():无效的指针
【发布时间】:2020-08-04 08:20:17
【问题描述】:

在头文件中声明

typedef struct htab {
size_t size;
size_t arr_size;
struct htab_item *arr[];
}htab_t;

并具有功能

htab_t *htab_init(size_t)
{
   htab_t *table = malloc(sizeof(htab_t)+n*(sizeof(struct htab_item*)));
   if (table == NULL)
   {
       fprintf(stderr,"Error: allocation failed\n");
       return NULL;
   }

在 malloc 行它抛出错误: munmap_chunk():invalid pointer 谁能解释一下为什么会这样? 编辑: n 是结构中 arr 的大小 我通过 gdb 运行它,当线路到达这个 malloc 时,它把我扔出去并说指针错误,所以它甚至无法达到“免费”功能

【问题讨论】:

  • 'n' 的值是多少?
  • 您确定是malloc 行导致了错误吗?我希望看到free
  • 是的,如果您未能初始化 htab::arr 中的指针然后释放它们,我希望看到这一点。
  • 使用调试构建,然后使用valgrind 运行您的程序。它非常擅长发现内存分配错误。

标签: c malloc


【解决方案1】:

发生的情况是 malloc 库代码通常直到程序后期才意识到它已经损坏了数据结构。因此,崩溃或错误消息的位置并不总是与实际错误相对应。

Glibc 具有由环境变量启用的 malloc 调试模式,但我发现 valgrind 更有用。

【讨论】:

    猜你喜欢
    • 2018-08-23
    • 2016-08-08
    • 2014-05-14
    • 2020-08-04
    • 2016-03-16
    • 2020-09-05
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多