堆栈周围的变量已损坏

Stack around variables corrupted

本文关键字:已损坏 变量 周围 堆栈      更新时间:2023-10-16

所以我在编写编程类时做了一个小测试,作为一个刚开始编码的人,我在代码中的某个地方犯了一个错误。

#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已损坏的错误,我不知道哪里出了问题。

问题很可能是您读取的内容超出了数组的范围。您将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=运算符将右侧参数分配给左侧参数。它还计算为对左参数的引用,因为任何"非零"都是true,而zero是false,所以它将编译并最终成为false

void main()

这应该是int main()