【问题标题】:stack around variable is corrupted when variable num is used使用变量 num 时,变量周围的堆栈已损坏
【发布时间】:2016-04-02 13:48:16
【问题描述】:

当使用变量 num 时,我在访问第 9 个索引时收到堆栈损坏错误,但是当我使用任何其他名称访问时,它会给出错误。请解释一下这个含糊不清的地方。

#include<iostream>
#include<iomanip>
using namespace std;
const int SIZE = 9;

class A
{
private:

    int num[SIZE];
    int num_2[SIZE];
public:
A()
{
    for(int i = 1 ; i <= 9 ; i++)
    {
        num_2[i] = i;
    }  
}
};
void main()
{
    A obj;
}

【问题讨论】:

标签: c++


【解决方案1】:

如果SIZE = 9 那么你的循环应该是

for(int i = 0; i < SIZE ; i++)

C++使用从0开始的索引,所以数组的第一个索引是[0],最后一个是[SIZE-1]

【讨论】:

  • 但是当我使用 num 变量时,...它确实 npt 给出错误???为什么但是在使用变量任何其他变量名时会出错
  • @JunaidLodhi 分配给array out of boundsundefined behavior。它可以做任何事情。它可以执行任务、抛出异常、炸毁您的计算机……任何事情!你看到了两个不同数组的同一个错误导致了两种不同的行为,我希望这能证明我的观点。
  • 如果它是一个例外那么兄弟它浪费了我的时间......只是为了检查它为什么没有给出错误 num 并给出错误 num_2
  • 正如我所说,这是未定义的行为。有可能得到SEGFAULTstack corruption,或者什么也没有!这取决于该内存位置已经存在什么以及您的计算机决定如何处理它!
【解决方案2】:

问题是i &lt;= 9
num_2[9]超出了num_2的结尾

【讨论】:

    猜你喜欢
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2012-11-08
    • 2019-09-04
    • 2020-07-26
    相关资源
    最近更新 更多