2012-04-06 58 views
0
static char st[][8192]; 
void foo (int tab_size){ 
    st = (char**) malloc ((tab_size+1)*sizeof(char)*8192); 
} 

我收到「malloc」行中st編譯錯誤的類型不完整。哪裏不對?謝謝。與malloc內存分配不完整類型的編譯錯誤

+1

你想做什麼? – cnicutar 2012-04-06 17:51:31

+0

問題是'st'不是'char **'。另外,你不應該施放'malloc'的結果。 – 2012-04-06 17:53:01

+0

作爲一個註釋,沒有理由在c中拋出'malloc'的返回值,並且實際上會導致問題,因爲'void *'會自動提升。 – twain249 2012-04-06 17:53:06

回答

1

由於您沒有指定st的內部尺寸的大小,編譯器不知道它需要多大;因此該類型爲不完整,並且您從未在調用malloc之前完成它。

因爲它看起來像你的意圖是要動態地分配st,去與奧利奇的意見,並聲明爲指針char 8192元素的數組:

static char (*st)[8192]; 

和重寫你的malloc語句

st = malloc(sizeof *st * (tab_size+1)); 

sizeof *st == == sizeof (char [8192]) 8192這種形式有點更清潔和更容易閱讀。還要注意,在C語言中,您不必投射malloc的結果(除非您使用的是C89之前的實現,在這種情況下,我很抱歉),並且不鼓勵這種做法。

這將分配足夠的空間來容納每個8192個字符的tab_size + 1數組。

僅在函數參數聲明的上下文中,T a[]聲明a作爲指向T的指針。

1

您對st的定義確實不是一個完整的類型。

試試這個:

static char (*st)[8192]; 

void foo (int tab_size){ 
    st = malloc ((tab_size+1)*sizeof(*st)); 
} 
+0

指向數組的指針?真的很好:-) – cnicutar 2012-04-06 17:52:53

+0

@OliCharlesworth它工作正常,但我不能得到現在的東西。這是一種數組?什麼意思sizeof(* st)? – TatianaCooper 2012-04-06 18:05:21

0

你是混淆兩種完全不同的類型:數組VS指向數組的指針。

static char st[][8192]; 

將st聲明爲數組類型。它不是一個可修改的左值,不能被賦值。

如果您的意圖是爲整數數組分配空間並將其分配給指針,請使用Oli Charlesworth建議的指針聲明。

請注意,您的st聲明不會分配空間。如果你嘗試這樣的事情,你會得到一個錯誤..

printf("0x%x\n", st); 

編譯器就像一個宣言對待它,並希望在其他地方看到的實際定義。 它不是一個定義,因爲你沒有給出數組的第一維的值。

相關問題