這是我的代碼。當我在initImg函數中訪問dtr數組時,它會產生堆棧溢出異常。可能是什麼原因?堆棧溢出C++
#define W 1000
#define H 1000
#define MAX 100000
void initImg(int img[], float dtr[])
{
for(int i=0;i<W;i++)
for(int j=0;j<H;j++)
img[i*W+j]=255;
for(int j=0;j<H;j++)
{
img[j] = 0;
img[W*(W-1)+j] = 0;
}
for(int i=0;i<W;i++)
{
img[i*W] = 0;
img[i*W+H-1] = 0;
}
for(int i=0;i<W;i++)
for(int j=0;j<H;j++)
{
if(img[i*W+j]==0)
dtr[i*W+j] = 0; // <------here
else
dtr[i*W+j] = MAX; // <------here
}
}
int main()
{
int image[W*H];
float dtr[W*H];
initImg(image,dtr);
return 0;
}
呃使用'std :: vector'? – Puppy 2011-06-02 20:21:36
@DeadMG:爲什麼要爲靜態數據使用動態結構?如果他所做的只是遍歷一個已知大小的數組 - 使用一個已知大小的數組,因爲它完全符合問題。 – Simon 2011-06-02 20:38:03
@Simon:無論如何,你正在創建一個動態大小的數組,它恰好是已知的大小。除此之外,直接使用new將允許內存泄漏,並且對超出邊界訪問的調試支持很差/不支持。 'std :: vector圖片(W * H);'以絕對安全的方式執行相同的功能。 –
Puppy
2011-06-02 20:39:49