2016-08-23 45 views
-3

おはようございます。 私はmalloc関数を使用して動的に作成された2D配列を操作する必要があるCUDAプロジェクトに取り組んでいます。例外コードc0000005アプリクラッシュ

私はここで私が現在働いているれているファイルの全体のコードを報告

http://pastebin.com/mcFdH4kQ

私は.exeファイルを生成した後にコードを実行しようとすると、私はアプリを引き起こしACCESS_VIOLATIONエラーが発生しましたクラッシュ。おそらく、主な問題はsetArrayItemAtXYという関数を扱っています。これは、パラメータとして渡された行列内の所定の整数値をあらかじめ決められた(x、y)位置に保存することになります。

構文に関して問題はありますか?どちらが問題だろうか?

ご返信ありがとうございます。

答えて

0

はい問題はありますが、(少なくとも直接ではなく)構文ではなく、operator precedenceです。

逆参照演算子*は、配列インデックス演算子[]より低い優先順位を持ちます。つまり、*array[x * cols + y]のような式は、*(array[x * cols + y])として解析されます。そして、それは正しくありません。

単純な解決策は、機能をに変更することではなく、setArrayItemAtXY関数内で実際には使用されないため、はポインタへのポインタを取ることはありません。通常のポインタを取って、平文array[x * cols + y](逆参照なし)を使用してください。

そうに宣言を変更:あなたはもちろん

void setArrayItemAtXY(int * array, int cols, int x, int y, int value); 
//      ^
//      | 
// Note: Single pointer here 

は、同様の機能に対するすべての呼び出しを変更する必要があります。

これは、コンパイラが値をポインタとして扱う点で、コンパイラに不平を言っているはずです。コンパイラの警告が表示されない場合は、より多くの警告を有効にする必要があります。

+0

オペレータの優先順位は構文の一部です。 –

関連する問題