二次元配列を引数として渡す方法
Posted: 2010年7月14日(水) 00:22
二次元配列を引数として受け取りその中身を表示する関数testを作ろうとしているのですが
コンパイルは通るのですが実行すると不正なアドレスを読み込んでいるようで動いてくれません。
具体的なエラーメッセージは以下のとおりで、停止時にVisualStudioのデバッガの矢印(?)はprintfの行で止まっています。
test.exe の 0x008213e8 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。
1次元配列を受け取り先頭要素を印字するtest2は動いてくれるので同じ方法でできると思ったのですがどうも違うようです。
二次元配列の場合はどのようにすればいいのでしょうか?
testの引数を test(double a[2][2]) などと具体的に指定してやれば動くのはわかりますが今回はサイズの分からない二次元配列に使えるような関数を作りたいのでこの方法は取れません。
実行環境
windows7 Pro 64bit
Visual Studio 2008
C言語の理解度
入門書を一通りやった程度でその内容を100%熟知してはいません

コンパイルは通るのですが実行すると不正なアドレスを読み込んでいるようで動いてくれません。
具体的なエラーメッセージは以下のとおりで、停止時にVisualStudioのデバッガの矢印(?)はprintfの行で止まっています。
test.exe の 0x008213e8 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。
1次元配列を受け取り先頭要素を印字するtest2は動いてくれるので同じ方法でできると思ったのですがどうも違うようです。
二次元配列の場合はどのようにすればいいのでしょうか?
testの引数を test(double a[2][2]) などと具体的に指定してやれば動くのはわかりますが今回はサイズの分からない二次元配列に使えるような関数を作りたいのでこの方法は取れません。
実行環境
windows7 Pro 64bit
Visual Studio 2008
C言語の理解度
入門書を一通りやった程度でその内容を100%熟知してはいません
#include<stdio.h> void test(double** a){ printf("%f\n",a[0][0]); } void test2(double* a){ printf("%f\n",a[0]=5); } int main(void){ int i,j; double a[2][2]={{1,2},{3,4}}; double x[2]={1,2}; for(i=0;i<2;i++) for(j=0;j<2;j++) printf("%f\n",a[j]); //ここまで動く //test(a); //呼びだすとtestのprintfを実行時にエラー test2(x); //これも動く return 0; }
