运行时检查失败 #2 - 变量“primes”周围的堆栈已损坏

Posted

技术标签:

【中文标题】运行时检查失败 #2 - 变量“primes”周围的堆栈已损坏【英文标题】:Run-time Check Failure #2 - Stack around the variable "primes" was corrupted 【发布时间】:2015-12-08 01:05:39 【问题描述】:

我已经查看了几乎所有其他运行时检查失败 #2 问题,只有 1 个将错误应用到与我的程序中相同的位置。正如评论的那样,该错误发生在我结束 main() 之后。我没有分配超出数组的末尾,并且在 main 返回后没有更改任何内容。

#include <iostream>

void findPrimes(bool primes[], const int arrSize);
int main()
    const int arrSize = 1000;
    bool primes[arrSize];
    for (int x = 0; x < arrSize; x++)
        primes[x] = true;
    
    findPrimes(primes, arrSize); //sets all non-prime numbers to false
    for (int x = 0; x < arrSize; x++) //I did not go past the size of the array.
        if (primes[x])
            std::cout << x << std::endl;
        
    
    return 0; //Error occurs after this point.


void findPrimes(bool primes[], const int arrSize) //detects and changes non-prime numbers to false
    int temp;
    for (int x = 2; x < arrSize; x++)
        temp = x + x;
        for (int c = 0; c < arrSize; c++)
            if (temp > arrSize)
                break;
            
            primes[temp] = false;
            temp += x;
        
    

【问题讨论】:

【参考方案1】:

你的测试

if (temp > arrSize)
        break;

在正确的轨道上以确保您不会超出数组边界,但是由于索引 arrSize 不是有效的数组索引,但不会导致循环出现错误break 在这一点上。将其更改为阅读

if (temp >= arrSize)
        break;

看看能不能解决问题。

【讨论】:

非常感谢,当我查看它时,我完全忽略了那部分。它现在可以 100% 运行。

以上是关于运行时检查失败 #2 - 变量“primes”周围的堆栈已损坏的主要内容,如果未能解决你的问题,请参考以下文章

c++ 运行时检查失败 #2 - 变量“ToSend22”周围的堆栈已损坏

运行时检查失败 #2 - 变量周围的堆栈已损坏

运行时检查失败 #2 - 变量“l1”周围的堆栈已损坏

运行时检查失败 #2 - 变量“索引”周围的堆栈已损坏

运行时检查失败 #2 - 变量“cid1”周围的堆栈已损坏

运行时检查失败 #2 - 变量“e_color”周围的堆栈已损坏