【发布时间】:2011-12-26 09:51:18
【问题描述】:
我不太会使用 C,最近我对二维数组初始化问题感到困惑。我需要调试某人的代码并坚持以下(她的原始代码):
const int location_num = 10000;
bool **location_matrix;
if (node_locations)
{
location_matrix = (bool **)malloc(location_num*sizeof(bool *));
if (!location_matrix)
{
cout<<"error 1 allocating location_matrix" << endl;
exit;
}
for (i=0; i<location_num; i++)
{
location_matrix[i] = (bool *) malloc(location_num*sizeof(bool ));
if (!location_matrix[i])
{
cout<<"error 2 allocating location_matrix" << endl;
exit;
}
for (j=0; j<location_num; j++)
location_matrix[i][j] = false;
}
}
我认为是多余的,所以我将其更改为:
location_matrix[location_num][location_num] = { {false} };
但是,分段错误发生在运行时。 我的问题是:上面的代码是如何失败的?如果看起来正确,那么动态分配和静态分配有什么区别?只是因为维度可能不是恒定的,所以我们需要动态地做吗? 另外,只是为了好奇,我如何 malloc 存储指针的二维数组?谢谢。
【问题讨论】:
-
你为什么用
malloc(n * sizeof(T))而不是new T[n]?
标签: c++ initialization multidimensional-array