如何在C中创建全局二维数组

时间:2013-01-28 18:19:43

标签: c arrays dynamic

global.h:

extern char ** map_stage;

global.c:此处出现错误C2099 - 初始化不是常数

char ** map_stage=create2DCharArray(map_height,map_length*map_length);

function create2DCharArray:

char ** create2DCharArray(int m, int n)
{ 
int i;
char** array;  
array = (char**) malloc(n*sizeof(char*));  
for (i = 0; i < n; i++) 
   array[i] = (char*) malloc(m*sizeof(char));  
return array;
}

我怎样才能让它发挥作用? 它说“错误C2099”...... 我需要一个全局动态二维数组!

谢谢你们!

2 个答案:

答案 0 :(得分:3)

map_stage是一个全局变量,因此它的初始值设定项应该是常量。您可以创建一个初始化函数来执行此操作。

/* global.c */

void init(void)
{
  map_stage = create2DCharArray(map_height, map_length * map_length);
}

另请注意,您的free无法访问。

答案 1 :(得分:2)

错误C2099表示“初始化程序不是常量”,这使我相信您已在全局范围内(即在任何函数之外)编写了map_stage声明。这不是有效的C ++。

您可以在其中放置变量的定义,但是您需要通过函数调用对其进行初始化,因为初始化程序不是编译时常量。