【发布时间】:2014-03-13 11:58:13
【问题描述】:
我想使用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
【问题讨论】:
-
R[160][160]超出范围。索引为 [0, size)。 -
<malloc.h>是非标准的;函数malloc()(及其朋友)在<stdlib.h>中声明。 -
0x13d = 317 = 158 + 159
-
为什么要使用变量来表示
rows和cols这样的常量?