时,我一直在写在C端应用程序,我一直有与结构一个奇怪的问题初始元素不是常数。当我尝试编译时,出现错误“错误:初始化元素不是常量”。任何帮助是极大的赞赏。Ç - 错误:创建结构*
这是我的代码:
typedef struct {
int x;
int y;
char style;
} Pixel;
Pixel *pixels = (Pixel *)malloc(9*128);
时,我一直在写在C端应用程序,我一直有与结构一个奇怪的问题初始元素不是常数。当我尝试编译时,出现错误“错误:初始化元素不是常量”。任何帮助是极大的赞赏。Ç - 错误:创建结构*
这是我的代码:
typedef struct {
int x;
int y;
char style;
} Pixel;
Pixel *pixels = (Pixel *)malloc(9*128);
的问题是,您所呼叫的外部函数malloc。
这将解决你的问题:
typedef struct {
int x;
int y;
char style;
} Pixel;
int main(void) {
Pixel *pixels = malloc(9 * 128);
}
在C你不能调用函数可变初始化,如果变量不是任何函数中。
int a = 5; //OK
int b = myfunc(); //ERROR, this was your case
int main() {
int c = 5; //OK
int d = myfunc(); //OK
}
正如从代码检查,我假设你认为你的sizeof(Pixel)
是9
字节,但是这可能并非如此。当你打电话给你的malloc,使用此代码:
Pixel *pixels = malloc(sizeof(Pixel) * 128);
此代码将在单行任何平台上分配内存128 Pixel
结构。
进一步阅读:
此代码aparently不在任何功能。然后以下=
表达只能是一个初始化,以及一个初始值设定必须是静态的(即可以在编译时计算)。然而,(在这种情况下的malloc)一个呼叫只能在一个功能。所以编译器抱怨。
以下是正确的:
typedef struct {
int x;
int y;
char style;
} Pixel;
int main(void)
{
Pixel *pixels = (Pixel *)malloc(sizeof(Pixel)*128);
//...
}
你怎么知道'的sizeof(像素)''是9'? – tilz0R
此代码不在任何功能中。但是,_call_(在本例中为malloc)只能在函数中。 –