所以我已經將segfault追蹤到線,但我不明白爲什麼這是一個段錯誤。有人能詳細說明我的方式錯誤嗎?這是爲什麼Segfault發生?
這裏是變量聲明。
size_t i, j, n, m, chunk_size, pixel_size;
i = j = n = m = 0;
chunk_size = 256;
pixel_size = 4;
這裏是數組聲明。
uint8_t** values = new uint8_t*[chunk_size];
for (i = 0; i < chunk_size; ++ i)
values[i] = new uint8_t[chunk_size];
float** a1 = new float*[chunk_size];
for (i = 0; i < chunk_size; ++i)
a1[i] = new float[chunk_size];
這裏是段錯誤發生的地方。
float delta, d;
for (i = 0; i < 256; ++i) {
for (j = n = m = d = 0; j < 256; j = m) {
while (i == 0 || d != 0) {
d = a1[i][m]; <------SEGFAULT per GDB
++m;
}
delta = (d - a1[i][j])/m;
n = j + 1;
while (n < j + m) {
a1[i][n] = a1[i][n - 1] + delta;
++n;
}
}
}
我對C++相當陌生,無法弄清楚爲什麼會出現段錯誤。這不是將數組變量設置爲變量的正確方法嗎?這是我的段錯誤的來源嗎?
注意:這整個事情的重點是用我的簡單插值公式將4x4陣列擴展到256x256陣列。
只要m大於或等於chunk_size,就會越過數組的邊界。這將是我的猜測。 我還建議使用有意義的變量名稱,我,j,n,m和d不是非常具有描述性,並且使得難以弄清楚你正在嘗試做什麼。 –
當調用'd = a1 [i] [m];''時,絕對確定'i'和'm'是否在界限內? –
你的while循環沒有針對'm'超出範圍的安全性。 –