我正在做一个学校项目,试图创建一个基于变量的二维数组。
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]..."
sizeofvstup1
和sizeofvstup2
是数组长度的变量。我应该如何在这里使用 calloc
?尝试了很多次来稍微改变一下线路但没有帮助......:/
代码应该是什么样子才能正常工作?
您没有为第一次分配分配适当的大小:
wagner =(int **)calloc((sizeofvstup1+1),sizeof(int));
此处您为指针数组分配空间,但您传递的是 sizeof(int)
作为元素大小。如果一个 int
小于一个 int *
,那么你就没有足够的空间,你最终会读/写超过数组的末尾。
将分配的元素大小更改为sizeof(int *)
。另外,不要强制转换 calloc
的返回值:
wagner = calloc((sizeofvstup1 + 1), sizeof(int *));
我是一名优秀的程序员,十分优秀!