我正在使用OpenEXR庫加載圖像。有時當我顛倒數組時遇到EXEC_BAD_ACCESS(訪問衝突)
這工作正常,除了圖像加載旋轉180度。我使用下面顯示的循環來反轉數組,但有時程序將退出,xcode會給我一個EXEC_BAD_ACCESS錯誤(我認爲它與msvc中的訪問衝突相同)。它不會每次發生,每5-10次就發生一次。
理想情況下,我想扭轉陣列的位置,雖然每次都會導致錯誤,但使用memcpy會失敗,但不會導致錯誤,只是一個空白圖像。我想知道是什麼原因導致這個問題。
這裏是我使用的代碼:(RGBA是4 「半」 S R,G,B的結構體,以及,在OpenEXR的定義)預先
Rgba* readRgba(const char filename[], int& width, int& height){
Rgba* pixelBuffer = new Rgba[width * height];
Rgba* temp = new Rgba[width * height];
// ....EXR Loading code....
// TODO: *Sometimes* the following code results in a bad memory access error. No idea why.
// Flip the image to conform with OpenGL coordinates.
for (int i = 0; i < height; i++){
for(int j = 0; j < width; j++){
temp[(i*width)+j] = pixelBuffer[(width*height)-(i*width)+j];
}
}
delete pixelBuffer;
return temp;
}
謝謝!
謝謝,我試圖扭轉一半陣列因各種原因失敗。這個錯誤似乎現在消失了,但它仍然不能解釋爲什麼它只是偶爾發生,所以我想我會讓問題持續一段時間。 我注意到你正在做我*高度現在(而不是我*寬度)。這是因爲我讀錯了順序或性能原因的圖像元素?謝謝。 – usm 2010-07-26 10:07:46
做我*身高是一個錯誤:)抱歉。我將更正代碼。在我的測試中,我將高度等於寬度的矩陣顛倒過來,因此我沒有這個問題。但是現在,如果您使用帶* i *高度代碼而不是i *寬度的代碼,那麼如果高度<>寬度,將會出現問題。我將更正代碼片段。感謝您指出我的錯誤:) – 2010-07-26 10:35:31
我使用加載的文件作爲OpenGL紋理,這(通常)意味着高度=寬度,這可能是爲什麼代碼爲我工作得很好。很遺憾,我沒有回答爲什麼我有時只會遇到錯誤,但由於您的代碼正常工作並且有我原本計劃使用的方法,因此我會接受您的答案。 – usm 2010-07-27 18:53:16