【问题标题】:What does "malloc.c:2539: sysmalloc: Assertion `(old_top == initial_top (av) && ....." mean?“malloc.c:2539: sysmalloc: Assertion `(old_top == initial_top (av) && .....” 是什么意思?
【发布时间】:2021-02-18 10:45:18
【问题描述】:

我正在尝试在 C 中调整数组的大小,但我得到了运行时断言

这是代码 sn-p :

        int *v = malloc(sizeof(v) * 5);
        memcpy(v, (int[]){ 0, 1, 2, 3, 4,}, 5 * sizeof(int));
        v = realloc(v, sizeof(int) * 6);
        v[6] = 6; 

        for(int i = 0; i < 5; i++)
        {
                printf("%d", v[i]); //assertion at this line
        }

我在运行程序时得到这个:

a.out: malloc.c:2539: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.

我不明白

我也没有收到任何警告

【问题讨论】:

  • 您从哪个命令收到该消息?尽管 Lundin 的回答中提到了您的程序中存在错误,但我无法真正看到它们是如何导致该消息的。假设指针大小大于或等于 int 大小,并且您仅在 realloc 之后越界访问,消息似乎与代码不匹配。

标签: c realloc


【解决方案1】:

您遇到了两个可能导致内存损坏的错误:

  • sizeof(v) -> sizeof(*v)
  • v[6] = 6;,这是超出范围的,因为您为 6 个项目而不是 7 个项目分配了空间。C 得到了 0 索引数组,正如他们在数组初学者课程中教我们的那样。

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    相关资源
    最近更新 更多