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

1 c malloc matrix

我想用C语言分配一个矩阵malloc.编译成功结束,但是当我执行程序时,我得到一个奇怪的值.请在这里举个例子:

#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]);
}
Run Code Online (Sandbox Code Playgroud)

我执行后得到例如:

R[158][159] = 0x13d
Run Code Online (Sandbox Code Playgroud)

Mau*_*ren 5

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

在尝试访问矩阵之前,请尝试重置您的ij变量.

编辑:

如果要查看已分配的值,您可能希望这样做:

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

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