为什么我的C ++代码会触发堆栈溢出?
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"Enter an odd number for the order of magic square: ";
cin>>num;
int sqr[5][5];
for (int i=0; i<num; i++)
for (int j=0;j<num; j++)
sqr [i][j]=0;
return 0;
}
答案 0 :(得分:1)
int sqr[5][5];
您将sqr
定义为双维数组col and row
均为5.有效col/row
介于[0..4]
之间,您需要确保num < 5 && num > 0
< / p>
答案 1 :(得分:0)
您最好使用vector<vector<int> >
,其大小会动态增加,
或将您的代码更改为
for (int i=0; i<num &&i < 5; i++)
for (int j=0;j<num && j < 5; j++)
sqr [i][j]=0;
因为您声明的sqr是sqr[5][5]
。
答案 2 :(得分:0)
可能存在: int num; 或者num可能变成一个大数字,由一个字符串产生。 加: 的printf( “%d”,NUM); 测试是否大于4。
答案 3 :(得分:0)
你想根据输入'n'创建一个n×n矩阵吗?
如果是这样,您不应该静态分配矩阵(请参阅其他答案以了解原因)。 如果'n'不是数字,则断言。
创建矩阵:
int **sqr = new int*[n];
for (int i = 0; i < n; i++)
sqr[i] = new int[n];
这将创建一个n x n阶的二维矩阵。 要索引它,你可以使用sqr [row] [col] (请记住:x表示列,y表示行!并且不要忘记删除所有这些内存!)
如果你想使用STL,那么你可以使用创建向量向量而不用做所有这些C风格指针的东西!