2012-03-15 19 views
0

私はそれが何であるか(ポインタ配列かポインタ配列の配列なのかどうかは分かりませんが)デバッガ経由でステップすると、メモリが割り当てられていることを意味する0xCDCDCDCDが得られます。初期化されていません。誰も私にそれを初期化する方法を示すことができますか?このポインタの配列を初期化するにはどうすればよいですか?

ありがとうございました。

char* (*vars)[4]; 

私はこのようなものを試してみたが、それはコンパイルエラーを与える:

for (int i = 0; i < 4; i++) 
    vars[i] = new char*[new char*][4]; // error C2440: 'initializing' : cannot convert from 'char **' to 'unsigned int' 
+6

それが何であるかわからない場合は、なぜそれを使用しようとしていますか? –

+3

私はあなたが達成しようとしていることを私たちに伝えることがより効果的だと思います。私はあなたが何をしたいと思うか、これが正しい方法であることを理解するのは難しいです。 –

+2

非常に複雑すぎます。 – chris

答えて

7

はまず、あなたはcdeclを使用する必要があります。

はのアレイ4へのポインタとしてVARSを宣言するcharへのポインタ

どのように初期化するかは、目的が何であるかによって異なります。しかし、たとえば:

// Create a new array 
vars = new (char *[1][4]); 
// Each element of the array in turn points to an array 
for (int i = 0; i < 4; i++) { 
    (*vars)[i] = new char[27]; 
} 

... 

// Cleanup 
for (int i = 0; i < 4; i++) { 
    delete [] (*vars)[i]; 
} 
delete [] vars; 

最後に、あなたはこのようなコードをC++で書くべきではありません。あなたが何をしようとしているのか(通常はコンテナやスマートポインタを含む)を実行するためのより良い方法が常にあります。

+2

+1、まさに私が言うつもりでしたが、あなたは私にそれを打ちました –

+0

ありがとう、それはすべての最初の行を除いて動作します。エラーC2440: '=': 'char **'から 'char *(*)[4]'に変換できません。 – SoftwareGuy

+0

@SoftwareGuy:それを修正しました。私の例は間違っていました。私はこのような構造を使用していないので、私は実践的ではありません! –

2

varsは、charへの4つのポインタの配列へのポインタです。

ができません持っているので、C++でない巣指数newので、何かのように:

vars = new (char*)[4]; 
for(int i=0; i<4; i++) { 
    (*vars)[i] = ...; 
} 

ループの内側の部分は、そのアレイ内のポインタの初期化は、それが強く残りに依存あなたのプログラムの。

しかし、真剣に、このようなことを書いていれば、あなたが行っている薬物が何であれ、それ以上、あるいはそれ以下を取る。

0

double (vars)[4];は、4倍の配列を宣言するだけです。 (オプションの括弧はちょうど混乱しています)。 4つの文字列の配列が必要な場合は、char *((vars)[4]);を使用してください(大括弧で囲まれています)。それらをnullに初期化したり、新しい文字列を割り当てるか、あらかじめ割り当てられたメモリをポイントすることができます。

char *vars[4]; 
for (int i = 0; i < 4; i++) 
    vars[i] = new char[I_HOPE_THIS_IS_BIG_ENOUGH]; 
+0

代替案ありがとうございます。私は、これを、新しい構造にすべてを適応させるのがどれほど簡単かを見てみましょう。 – SoftwareGuy

+0

このアイデアは本当に良かったです。私は "I_HOPE_THIS_IS_BIG_ENOUGH"が100項目に設定された2-D CString配列で終わった。実際には、私たちはこれに到達しないことを知っています...あなたの提案と助けを感謝します。 – SoftwareGuy