0

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

4 回答 4

1
int sqr[5][5];

您定义为都是 5 的sqr二维数组。有效介于 之间,您需要确保col and rowcol/row[0..4]num < 5 && num > 0

于 2013-10-04T01:47:11.753 回答
0

可能应该存在: int num; 或者 num 可能会变成一个很大的数字,由字符串引起。添加: printf("%d",num); 测试它是否大于4。

于 2013-10-04T02:04:10.907 回答
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].

于 2013-10-04T01:45:57.240 回答
0

您想根据输入“n”创建一个 nxn 矩阵吗?

如果是这样,则不应静态分配矩阵(有关原因,请参见其他答案)。如果 'n' 不是数字,则断言。

创建矩阵:

int **sqr = new int*[n];
for (int i = 0; i < n; i++)
    sqr[i] = new int[n];

这将创建您创建的 nx n 阶二维矩阵。要对其进行索引,您可以使用 sqr[row][col] (记住:x 表示列,y 表示行!不要忘记删除所有这些内存!)

如果您想使用 STL,那么您可以使用创建向量的向量,而无需执行所有这些 C 样式指针的事情!

于 2013-10-04T02:14:30.173 回答