堆栈溢出 C++

2024-03-07

这是我的代码。当我在 initImg 函数中访问 dtr 数组时,它给出了堆栈溢出异常。可能是什么原因?

#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;
}

This:

int image[W*H];
float dtr[W*H];

在堆栈中创建每个 4 * 1000 * 1000 ~ 4 MB 的数组。堆栈空间有限,通常小于 4 MB。不要这样做,使用 new 在堆中创建数组。

int *image = new int[W*H];
float *dtr = new float[W*H];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

堆栈溢出 C++ 的相关文章

随机推荐