为什么在C中分配矩阵时会得到十六进制值?

时间:2014-03-13 11:58:14

标签: c matrix malloc

我想使用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

2 个答案:

答案 0 :(得分:5)

您正在访问矩阵的第160行和第160行,但在您的情况下,索引的范围是0到159.

尝试重置ij变量,然后再尝试访问矩阵。

修改

如果要查看已分配的值,可能需要执行以下操作:

printf("R[%d][%d] = %d\n", i, j, mat[i * cols + j]);

此外,您应该将malloc.h包含更改为stdlib.h,最新的是标准版。

答案 1 :(得分:2)

C数组索引从0开始。因此,当您访问R处的元素时,您的2D数组0的范围从159R[160][160]会导致未定义的行为

printf中使用格式说明符%p来打印内存位置的地址。使用%d在这些内存位置中的值。

此外,您还没有free()使用malloc()制作程序leak内存所分配的内存。