【发布时间】:2014-09-03 11:19:47
【问题描述】:
我有一个不寻常的情况。 这是sn-p:
int i, j;
short ** s = (short **)malloc(128);
for(i = 0; i < 14; i++){
s[i] = (short *)malloc(128);
for(j = 0; j < 128; j++)
s[i][j] = 0;
}
printf("Value of s[%d][%d] = %d\n",2,40,s[2][40]);
s[1][108] = 99;
printf("Value of s[%d][%d] = %d\n",2,40,s[2][40]);
我运行时得到的输出是:Value of s[2][40] = 0
Value of s[2][40] = 99
消除循环并写入短的 s[14][128] 会产生正确的输出(两次打印中 s[2][40] 的值都是 0)
为什么我可以用 s[1][108] 访问 s[2][40]? 我在 Ubuntu 12.04 上使用 gcc。
【问题讨论】:
-
ot:即使你有一个带有单个语句的循环,你也应该总是放大括号(好习惯)
标签: c multidimensional-array malloc