【发布时间】:2014-08-31 15:59:48
【问题描述】:
我正在尝试使用指针来实现矩阵。代码似乎正确,但程序在打印数组的第一行后挂起。
int main ()
{
int **a;
int i,j;
int count = 1;
for (i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
*(*(a + i) + j) = count;
count += 1;
printf("%d\t", *(*(a + i) + j));
}
}
}
【问题讨论】:
-
当然提供的代码不起作用。添加一些示例数据,这样我们就不会立即取消引用
NULL。 -
那么到底是不是真的编译器挂了,而不是你的程序?
-
编译器不打印数组的行,但程序会尝试这样做。我已经相应地解决了这个问题。
-
您还没有初始化
a或给它任何指向的空间。使用它会导致本质上未定义的行为;令人惊讶的是它没有在 打印数组的第一行之前崩溃。 -
我建议您删除此问题中的“代码似乎正确”断言。很明显,这是不正确的(因为它不起作用),因此您可以通过对损坏的代码不那么自信来避免不必要的嘲笑。