スレ立てるまでもない質問はここで 123匹目at TECHスレ立てるまでもない質問はここで 123匹目 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト3:デフォルトの名無しさん 12/12/09 10:12:17.78 動的二次元配列を作ろうとしているのですが k=10 char** a=NULL; a=(char**)malloc(sizeof(char*)*2); a[1]=(char*)malloc(sizeof(char)*k); こういう時に a[1][100]とかに要素数入れられるのがわからんし sizeof *a[1]がkをいくつにしても4になる理由がわかりません 助けてください 4:デフォルトの名無しさん 12/12/09 10:19:35.51 ポインタは配列じゃないから、サイズの管理なんてしてないし、 mallocは単にメモリを確保するだけで、確保外のメモリを読み書きするのを 禁止してくれたりはしないから、書きこんだらあらぬデータが壊れるかもだし、 エラーで落ちるかも。 5:デフォルトの名無しさん 12/12/09 10:20:43.28 >>1 おつ! 6:デフォルトの名無しさん 12/12/09 10:25:39.80 >>4 ありがとう 上の例でa[1][9]まできっちりメモリ確保されたか確認する手段ってあるんですか? 7:デフォルトの名無しさん 12/12/09 10:26:51.15 >>3 a=(char**)malloc(sizeof(char*)*2); で、char *というポインタ値を入れる配列が2個できます。 a[0] と a[1]です。ポインタ値は(32bitでは)4bytesです。 a[1]=(char*)malloc(sizeof(char)*k); で、charという値を入れる配列が k個できます。 a[1][0],a[1][1],,,,a[1][k-2],a[1][k-1]です。 charは、(Cの規格では)1bytesです。 > sizeof *a[1]がkをいくつにしても4になる理由がわかりません 多分 sizeof(a[1]) の事だと思いますが、a[1]は、上に書いたように ポインタ値(4bytes)なので4になります。 ちなみに、k = 10 であれば、 > a[1][100]とかに要素数入れられるのがわからんし これは確保した領域外へのアクセスなので、やってはいけません。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch