简体   繁体   中英

C++ program run perfectly on Linux but can't run on Windows

I have this code which run perfectly on Ubuntu 16.04.3 LTS. But when i build and run it via Codeblock on Windows. It's just CRASH. I don't know what i was wrong and how can i fix this problem. There are a lot of C++ program that i wrote which can run on Linux but CRASH on Windows like that.

Crashed Pricture

Thanks you guys so much for the help!

#include <iostream>

using namespace std;

int d = 1;

void topRight(int [999][999], int, int, int, int);
void bottomLeft(int [999][999], int, int, int, int);

void topRight(int a[999][999], int x1, int y1, int x2, int y2) {
  for (int i=x1;i<=x2;i++) a[y1][i]=d++;
  for (int j=y1+1;j<=y2;j++) a[j][x2]=d++;
  if (x2-x1>0 && y2-y1>0){
    y1++;
    x2--;
    bottomLeft(a,x1,y1,x2,y2);
  }
}

void bottomLeft(int a[999][999], int x1, int y1, int x2, int y2) {
    for (int i=x2;i>=x1;i--) a[y2][i]=d++;
    for (int j=y2-1;j>=y1;j--) a[j][x1]=d++;
    if (x2-x1>0 && y2-y1>0) {
        x1++;
    y2--;
        topRight(a,x1,y1,x2,y2);
    }
}

int main(void){
  int a[999][999],m,n,i,j;
  cout << "Insert n: ";
  cin >> n;
  cout << "Insert m: ";
  cin >> m;
  topRight(a,0,0,n-1,m-1);
  cout << "\nA spiral-shaped two-dimensional array whith size " << m << " x " << n << " is: \n\n";
  for(i=0;i<m;i++){
    for(j=0;j<n;j++){
      cout << a[i][j] << "  ";
    }
    cout << "\n";
  }
}

I compiled on Ubuntu terminal with this command:

g++ program.cpp -o program

And ran it with this command:

./program

When you declare 999x999 matrix, with simple math:

999*999 = 998001

An integer holds 4 byte in memory, so

998001*4 = 3992004

Almost equals to 4*10^6 byte. When u declare a variable in your main function, it tries to take memory from the stack. In stack, you can not give such that memory. Thats why you are getting stackoverflow error.

Try to reduce the sizes of your matrice or declare this variable as global. But global variables also have limit.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM