这是我的代码。当我在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