坚持定义大型2d阵列--c ++

时间:2016-07-29 18:31:47

标签: c++ arrays image primes

为了好玩,我正在编写一个使用素数创建图像的程序。为此我创建了一个包含所有自然数的二维数组,直到某一点。

素材在图像中表示为黑色像素,复合数字为白色。 该程序适用于小于1000 * 1000的尺寸,但当它超过它时会卡住。 我如何解决它,任何帮助表示赞赏。

#include <iostream>
#include <cmath>
#include <fstream>

using namespace std;

bool isPrime(long long a){

  if(a==1){return false;}

  if(a==2){return true;}

  if(a%2==0){return false;}

  long long root = sqrt(a);
  for(long long i=3;i<=root;i+=2){
    if(a%i==0){return false;}
  }
  return true;
}

int main(){
  int width = 0, height = 0;
  cout << "Which dimentions do you want the picture to be?" << endl;
  cout << "Width: " << flush;
  cin >> width;
  cout << "Height: " << flush;
  cin >> height;

  /*Create matrix*/
  long long imageMap[height][width];
  long long numberOfPixels = width*height;
  long long i = 1;
  long long x = 0 , y = 0;
  cout << "Number of pixels the image will have: " << numberOfPixels << endl;

  while(i<=numberOfPixels){
    imageMap[x][y] = i;
    x++;
    if(x==width){
      y++;
      x=0;
    }
    i++;
  }

  cout << "Image map done" << endl;
  cout << "Creating prime map, please wait..." << endl;


  /*Generate prime map*/
  int primeMap[width][height]; //The program gets stuck here


  for(long long y = 0; y < width; y++){
    for(long long x = 0; x < height; x++){
      if(isPrime(imageMap[x][y])){
        primeMap[y][x] = 1;
      } else {
        primeMap[y][x] = 0;
      }
      cout << " x = " << x << flush;
    }
    cout << endl << "y = " << y << endl;
  }

  cout << "Writing to file, please wait..." << endl;

  /*Write to file*/
  ofstream primeImage;
  primeImage.open("prime.pbm");

  primeImage << "P1 \n";
  primeImage << width << " " << height << "\n";

  for(int y = 0; y < width; y++){
    for(int x = 0; x < height; x++){
      primeImage << primeMap[y][x] << " ";
    }
    primeImage << "\n";
  }
  primeImage.close();
  cout << "Map creation done" << endl;
  return 0;
}

1 个答案:

答案 0 :(得分:0)

如果内存有效,则应用的默认大小堆栈为1MB。 Joachim是正确的,最好的方法是学习std :: vector。但如果这只是一个有趣的一次性程序,你可以简单地增加堆栈大小以使其正常工作。如果您正在使用visual studio,请打开项目属性并查看链接器系统选项卡。您可以使用堆栈保留值来增加堆栈大小。但我不建议为实际工作项目这样做。

顺便说一句:如果joachim希望重新发表评论作为答案,我建议你接受这个评论。