为什么这C++代码会触发堆栈溢出
Why is this C++ code triggering a 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;
}
int sqr[5][5];
您将sqr
定义为双维数组,col and row
都是 5。有效col/row
在 [0..4]
之间,需要确保num < 5 && num > 0
<</p>
最好使用 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 样式的指针内容!
相关文章:
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- C++ 对象数组堆栈溢出
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- 对象接收堆栈溢出异常 c++ 的排序向量
- 将公共递归转换为尾递归,因为大型输入的堆栈溢出
- C++ 中递归期间的堆栈溢出
- 启动 dll 时 C# 环境堆栈溢出
- 在C++中使用数组时如何防止堆栈溢出?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 当我尝试为结构分配新指针时出现堆栈溢出错误
- 为什么析构函数无休止地调用自己(导致堆栈溢出)?
- 为什么堆栈溢出?如有建议,不胜感激
- 主函数执行时C++堆栈溢出异常
- 如何在不导致堆栈溢出的情况下计算非常大的数字和很小的 HCF.我正在使用欧几里得算法
- 我正在尝试使用回溯来解决 N queen 问题,但在编译时它会给出运行时错误(动态堆栈缓冲区溢出)
- 如何在Windows上报告堆栈缓冲区溢出
- 如何抑制来自 gcc 中地址清理器的堆栈缓冲区溢出
- 声明大数组时堆栈/堆溢出
- c++中栈溢出和分段错误的危险