我想使用malloc
在C中分配一个矩阵。编译成功结束,但是当我执行程序时,我得到一个奇怪的值。请在这里举个例子:
#include<stdio.h>
#include<malloc.h>
int main(int argc, char **argv){
int rows=160, cols=160;
int *mat = (int *)malloc(rows * cols * sizeof(int));
int i, j;
for(i=0;i<160;i++) for(j=0;j<160;j++) mat[i * cols + j]=i+j;
for(i=0;i<160;i++) for(j=0;j<160;j++)
printf("R[%d][%d] = %p\n", i, j, (void*)mat[i * cols + j]);
}
我执行后得到例如:
R[158][159] = 0x13d
答案 0 :(得分:5)
您正在访问矩阵的第160行和第160行,但在您的情况下,索引的范围是0到159.
尝试重置i
和j
变量,然后再尝试访问矩阵。
修改强>
如果要查看已分配的值,可能需要执行以下操作:
printf("R[%d][%d] = %d\n", i, j, mat[i * cols + j]);
此外,您应该将malloc.h
包含更改为stdlib.h
,最新的是标准版。
答案 1 :(得分:2)
在C
数组索引从0
开始。因此,当您访问R
处的元素时,您的2D数组0
的范围从159
到R[160][160]
会导致未定义的行为
printf中使用格式说明符%p
来打印内存位置的地址。使用%d
在这些内存位置中的值。
此外,您还没有free()
使用malloc()
制作程序leak
内存所分配的内存。