gpt4 book ai didi

c - 如何在没有 valgrind 错误的情况下调用二维数组?

转载 作者:太空宇宙 更新时间:2023-11-04 01:45:07 26 4
gpt4 key购买 nike

我正在做一个学校项目,试图创建一个基于变量的二维数组。

int **wagner;
wagner = (int **)calloc((sizeofvstup1 + 1), sizeof(int));
for (int i = 0; i < (sizeofvstup1 + 1); i++) {
wagner[i] =(int *)calloc((sizeofvstup2 + 1), sizeof(int));
}

我使用 calloc 在每个数组位置上获取 0。但是 valgrind 一直告诉我类似这样的事情:

Invalid write of size 8 at the "wagner[i]..."

sizeofvstup1sizeofvstup2 是数组长度的变量。我应该如何在这里使用 calloc ?尝试了很多次来稍微改变一下线路但没有帮助......:/

代码应该是什么样子才能正常工作?

最佳答案

您没有为第一次分配分配适当的大小:

wagner =(int **)calloc((sizeofvstup1+1),sizeof(int));

此处您为指针数组分配空间,但您传递的是 sizeof(int) 作为元素大小。如果一个 int 小于一个 int *,那么你就没有足够的空间,你最终会读/写超过数组的末尾。

将分配的元素大小更改为sizeof(int *)。另外,不要强制转换 calloc 的返回值:

wagner = calloc((sizeofvstup1 + 1), sizeof(int *));

关于c - 如何在没有 valgrind 错误的情况下调用二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55181598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com