为什么这个C ++代码会触发堆栈溢出?

时间:2013-10-04 01:39:09

标签: c++ stack-overflow

为什么我的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;

}

4 个答案:

答案 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风格指针的东西!