堆栈周围的变量已损坏

时间:2015-11-09 08:36:35

标签: c++ visual-studio-2010

所以我在做编程课时做了一点测试,并且对编码很新,我在代码中的某个地方犯了一个错误。

#include <iostream>
#include <cmath>
#include <iomanip>


using namespace std;

void main()
{
    const int m = 4;                            
    int n = 3, p = 46, i;                       
    int X[m];                                   
    int q[m];                           

    for (i = 0; i < m; i++)                     
        q[i] = p;                               
    q[i+1] = p - q[i] / n;
    if (q[i] = 0)
    {
        X[i] = n;
    }
    else{ X[i] = q[i] / pow(n, m - i); }
    cout << "Rezultatai: " << X << endl;
}

它一直显示变量Xq已损坏的错误,我不知道哪里出错了。

1 个答案:

答案 0 :(得分:0)

问题很可能是您在数组范围之外阅读。您将q声明为包含4个元素的数组,从索引0开始,到索引3结束。

for (i = 0; i < m; i++)
    q[i] = p;

在for循环之后,i将具有m(4)的值,使其不是有效的下标。每次在此之后使用i作为下标运算符(如q[i])时,您都处于未定义行为的范围内。导致腐败的原因是什么。我不知道你想做什么,但你需要确保0 <= i && i < m

其他一些事情:

if (q[i] = 0)

除了i仍然不在q的范围内之外,您还需要====运算符会比较相等,并按照您的预期评估truefalse=运算符为左侧运算符指定了正确的参数。它还评估对左参数的引用,因为任何&#34;不是零&#34;是truezero是假的,这将编译并最终成为false

void main()

这应该是int main()