gpt4 book ai didi

c++ - 此错误 :"C6262: Function uses ' 160000062 0' bytes of stack: exceeds/analyze:stacksize ' 1638 4'. Consider moving some data to heap"

转载 作者:太空宇宙 更新时间:2023-11-04 12:30:47 25 4
gpt4 key购买 nike

当我构建代码时,它运行没有问题,但是我调试代码时,这会生成消息:函数使用堆栈的“1600000620”字节:超过/分析:堆栈大小 16384。

我将声明:int array[2000][2000] 放入 int main{} 中,因为当 int array[2000][2000] 超出 int main{} 时,它会生成错误:array is ambiguous。

#include <iostream> 
#include <fstream>
#include <sstream>
using namespace std;

/* Function to sort an array using insertion sort*/
void insertionSort(int arr[], int n)
{
int i, key, j;
for (i = 1; i < n; i++){
key = arr[i];
j = i - 1;
/* Move elements of arr[0..i-1], that aregreater than key, to one
position aheadof their current position */
while (j >= 0 && arr[j] > key){
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}

int arr[2000][2000];
int main()
{
int array[2000][2000];
int window[9], row = 0, col = 0, numrows = 0, numcols = 0, MAX = 0;
ifstream infile("phone.jpg");
stringstream ss;
string inputLine = "";

// First line : version
getline(infile, inputLine);
if (inputLine.compare("P2") != 0) cerr << "Version error" << endl;
else cout << "Version : " << inputLine << endl;

// Continue with a stringstream
ss << infile.rdbuf();

// Secondline : size of image
ss >> numcols >> numrows >> MAX;

//print total number of rows, columns and maximum intensity of image
cout << numcols << " columns and " << numrows << " rows" << endl<<
"Maximium Intesity "<< MAX <<endl;

//Initialize a new array of same size of image with 0
for (row = 0; row <= numrows; ++row)
{
array[row][0] = 0;
}
for (col = 0; col <= numcols; ++col) {
array[0][col] = 0;
}

// Following lines : data
for (row = 1; row <= numrows; ++row)
{
for (col = 1; col <= numcols; ++col)
{
//original data store in new array
ss >> array[row][col];
}
}

// Now print the array to see the result
for (row = 1; row <= numrows; ++row)
{
for (col = 1; col <= numcols; ++col)
{
//neighbor pixel values are stored in window including this pixel
window[0] = array[row - 1][col - 1];
window[1] = array[row - 1][col];
window[2] = array[row - 1][col + 1];
window[3] = array[row][col - 1];
window[4] = array[row][col];
window[5] = array[row][col + 1];
window[6] = array[row + 1][col - 1];
window[7] = array[row + 1][col];
window[8] = array[row + 1][col + 1];

//sort window array
insertionSort(window, 9);

//put the median to the new array
arr[row][col] = window[4];
}
}

ofstream outfile;

//new file open to stroe the output image
outfile.open("Medianfilter.pnm");
outfile << "P2" << endl;
outfile << numcols << " " << numrows << endl;
outfile << "255" << endl;

for (row = 1; row <= numrows; ++row)
{
for (col = 1; col <= numcols; ++col)
{
//store resultant pixel values to the output file
outfile << arr[row][col] << " ";
}
}

outfile.close();
infile.close();
return 0;
}

我希望这个程序能够清除图像,去除图像中的噪声。

最佳答案

您无法将声明 int array[2000][2000]; 移动到全局范围,因为您正在使用 using namespace std;

using namespace std; 语句指示编译器将在命名空间 std 中找到的所有名称导入全局命名空间,以便您可以直接使用它们(例如 string) 而不是通过它们的命名空间访问它们(例如 std::string)。

这通常是不鼓励的,请参阅 this question ,并且您有一个完美的例子来说明原因。

从C++11开始,标准库命名空间std中有一个名为array的类模板,见reference for std::array .

这意味着 array 已经可能在全局范围内具有意义。然后您尝试声明一个名为 array 的变量,编译器不再知道 array 是应该引用您声明的变量还是从中导入的类模板标准库命名空间。因此错误消息。

要解决这个问题,请为您的变量 array 使用不同的名称,或者更好的是,不要使用 using namespace std; 并限定您对标准库的所有引用使用 std::

关于c++ - 此错误 :"C6262: Function uses ' 160000062 0' bytes of stack: exceeds/analyze:stacksize ' 1638 4'. Consider moving some data to heap",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58703381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com