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

Why is this C++ code triggering a stack overflow?

本文关键字:堆栈 栈溢出 C++ 代码 为什么      更新时间:2023-10-16

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

}

int sqr[5][5];

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

div class="answers">

最好使用 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].

可能存在:整数;或者 num 可能变成一个大数字,由字符串产生。加:printf("%d",num);测试以查看它是否大于 4。

你想创建一个基于输入'n'的n x n矩阵吗?

如果是这样,则不应静态分配矩阵(请参阅其他答案以了解原因)。如果"n"不是数字,则断言。

要创建矩阵:

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

这将创建您创建的 n x n 阶的 2D 矩阵。要索引到它,你可以使用 sqr[row][col](记住:x表示列,y表示行!并且不要忘记删除所有这些内存!

如果你想使用 STL,那么你可以使用创建向量向量,而无需做所有这些 C 样式的指针内容!