2016-08-23 46 views
-3

大家早上好。 我正在開發一個CUDA項目,在該項目中我需要操作一些使用malloc函數動態創建的2D數組。異常代碼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

運算符優先級是語法的一部分。 – 2016-08-23 08:12:48

相關問題