2012-01-20 5 views
1

誰かがCの文字のポインタの配列へのポインタのためのメモリを正しく割り当てる方法を説明できますか?たとえば:char *の配列へのポインタにどのようにメモリを割り当てるのですか?

char *(*t)[]; 

私はこのようにそれをやろう:

*t = malloc(5 * sizeof(char*)); 

これは私にコンパイルエラーを与える:

error: invalid use of array with unspecified bounds 

この上の任意の支援は素晴らしいことです!ありがとう

+0

だけでなくポインタとして配列のだと思うが - あなたは、ポインタへのポインタにメモリを割り当てる終わるようにします。つまり、ポインタの配列のためのスペースを割り当ててから順番に各 '文字列'を割り当てます。 –

答えて

3

は次のとおりです。

char **t = (char**)malloc(<no of elements> * sizeof(char*)); 

ポインタの配列を割り当てます。

for (i = 0 ; i< <no of elements> ; i++) 
{ 
    t[i] = (char*)malloc(<length of text> * sizeof(char)); 
} 

これは、配列の各要素が指すテキストにメモリを割り当てます。

+0

これは私がやろうとしていることの線に沿っていると思いますが、コーディングするとエラーになります。 (* t)[i] = malloc(<テキストの長さ> * sizeof(char);)私は間違っていますが、アドレスtでポインタの配列のためのスペースを割り当てると言っています。 – icedTea

+0

あなたの例を完成させるために 't'の定義を加えるべきだと思う。 –

+0

@DustyCampbell私の答えを編集した。それは完全ではなかったし、タイプキャストとtの定義を省いた。 –

0

それはそれが割り当てられる方法に依存しますが、ここでは1つの方法です。注意すべき

char** myPointer = malloc(sizeof(char *) * number_Of_char_pointers) 
int i; 
for(i = 0; i < number_Of_char_pointers; i++) 
{ 
    myPointer[i] = malloc(sizeof(char) * number_of_chars); 
} 

何かがmyPointer [i]は、ほぼ正確に同一ではない初期化時に、変数を逆参照するために使用されているとき、*(myPointer + i)を言うのであるということです。

2

人々が「Xの配列へのポインタ」と言うとき、通常、実際にはの最初の要素のXの配列を指すポインタを意味します。ポインタの配列型はCで使用するのが非常に厄介であり、通常、多次元配列の使い方でしか出現しません。それと

が希望のタイプは、単にchar **で、言った:これはなること

char *(*t)[num_elems] = malloc(sizeof *t); 

注:

char **t = malloc(num_elems * sizeof *t); 

へのポインタの配列タイプを使用して、それは次のようになります。 C99可変長配列型num_elems整数定数式であり、正式な意味でのものではありません。あなたは何ができるか

+0

2番目のステートメント "char(* t)[num_elems] = malloc(sizeof * t)"は意味が分かりません。それ以上。割り当てのためにメモリを逆参照すると、num_elementsで割り当てられたメモリ空間は返されません。その余分な構文を使用するとどんな効果がありますか? – rubixibuc

+0

「割り当てのためにメモリを逆参照する」とはどういう意味ですか?私が与えたコードには参照解除はありません。 –

+0

ああ、私は今修正するつもりが1つあります。 –

-2

はこのお試しください:

int main() 
{ 
    char** a = new char* [100]; 
    delete []a; 
    return 0; 
} 
+1

-1 'void main'の場合-1、Cの質問に対するC++の答えの場合-1 –

関連する問題