時,我一直在寫在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)只能在函數中。 –