我不经常使用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存储指针的2d数组?谢谢。
malloc(n * sizeof(T))
而不是new T[n]
? - moshbear