static char st[][8192];
void foo (int tab_size){
st = (char**) malloc ((tab_size+1)*sizeof(char)*8192);
}
我收到「malloc」行中st編譯錯誤的類型不完整。哪裏不對?謝謝。與malloc內存分配不完整類型的編譯錯誤
static char st[][8192];
void foo (int tab_size){
st = (char**) malloc ((tab_size+1)*sizeof(char)*8192);
}
我收到「malloc」行中st編譯錯誤的類型不完整。哪裏不對?謝謝。與malloc內存分配不完整類型的編譯錯誤
由於您沒有指定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
的指針。
您對st
的定義確實不是一個完整的類型。
試試這個:
static char (*st)[8192];
void foo (int tab_size){
st = malloc ((tab_size+1)*sizeof(*st));
}
指向數組的指針?真的很好:-) – cnicutar 2012-04-06 17:52:53
@OliCharlesworth它工作正常,但我不能得到現在的東西。這是一種數組?什麼意思sizeof(* st)? – TatianaCooper 2012-04-06 18:05:21
你是混淆兩種完全不同的類型:數組VS指向數組的指針。
static char st[][8192];
將st聲明爲數組類型。它不是一個可修改的左值,不能被賦值。
如果您的意圖是爲整數數組分配空間並將其分配給指針,請使用Oli Charlesworth建議的指針聲明。
請注意,您的st聲明不會分配空間。如果你嘗試這樣的事情,你會得到一個錯誤..
printf("0x%x\n", st);
編譯器就像一個宣言對待它,並希望在其他地方看到的實際定義。 它不是一個定義,因爲你沒有給出數組的第一維的值。
你想做什麼? – cnicutar 2012-04-06 17:51:31
問題是'st'不是'char **'。另外,你不應該施放'malloc'的結果。 – 2012-04-06 17:53:01
作爲一個註釋,沒有理由在c中拋出'malloc'的返回值,並且實際上會導致問題,因爲'void *'會自動提升。 – twain249 2012-04-06 17:53:06