如何解决“malloc.c:2539: sysmalloc: Assertion `(old_top == initial_top (av) && .....”是什么意思?
我试图在 C 中调整数组的大小,但我得到一个运行时断言
这是代码片段:
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.
我不明白
我也没有收到任何警告
解决方法
您有两个可能导致内存损坏的错误:
-
sizeof(v)
->sizeof(*v)
-
v[6] = 6;
,这是越界的,因为您为 6 个项目而不是 7 个项目分配了空间。C 得到了 0 索引数组,正如他们在数组初学者课程中教给我们的那样。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。