C++ 受'影响的变量;坏的';说明书
下面是我的代码,用于解决PE的问题7(“找到第10001个素数”): 我的问题是,为什么会发生这种情况?我确实知道一个简单的解决方法是在C++ 受'影响的变量;坏的';说明书,c++,C++,下面是我的代码,用于解决PE的问题7(“找到第10001个素数”): 我的问题是,为什么会发生这种情况?我确实知道一个简单的解决方法是在l-1处停止循环(或者更好,用N=1初始化,然后在N之后递增),但我更感兴趣的是,这段代码如何影响一个没有明确(直接?)涉及到代码糟糕部分的变量 谢谢大家! 操作符不执行边界检查some_array[102],如果它在您的数组之外,那么它将简单地变为102*sizeof(type)。C++不会在意.< /P> 如果幸运的话,你的程序会崩溃,有时你可能会改变别人的
l-1
处停止循环(或者更好,用N=1
初始化,然后在N
之后递增),但我更感兴趣的是,这段代码如何影响一个没有明确(直接?)涉及到代码糟糕部分的变量
谢谢大家! 操作符不执行边界检查
some_array[102]
,如果它在您的数组之外,那么它将简单地变为102*sizeof(type)。C++不会在意.< /P>
如果幸运的话,你的程序会崩溃,有时你可能会改变别人的变量,那么这些就是可能产生的最糟糕的错误
这就是为什么我在工作中反复提到使用
std::array
和std::vector
的原因,因为它们附带了。at(I)
函数具有边界检查。它试图更改数组中不存在的元素的值。
您的内存被重写了。一旦你这么做了,所有关于将会发生什么的赌注都将落空。未定义的行为。任何事情都有可能发生。但出于好奇,至少粗略地说,当数组的元素不存在时,背景中发生了什么会导致程序写入l
(而不是任何其他变量,或者根本不存在?“如果你幸运的话…”。如果你运气不好,那么程序中的其他地方就会出现一些看似不相关的bug,你将花费漫长的不眠之夜试图找到这个bug的来源。
#include <iostream>
using namespace std;
bool isPrime(int n, int primes[], int l){
int i=0;
for (int i=0; i < l; i++){
if (primes[i] != 0 && n%primes[i] == 0){
return false;
}
}
return true;
}
int main()
{
int k=3;
int primes[10001] = {0};
primes[0]=2;
const int l=sizeof(primes)/sizeof(primes[0]);
int N=0;
while (N < l){
if(isPrime(k, primes, l)==true){
primes[++N]=k;
}
k+=2;
}
cout << primes[l-1] << endl;
return 0;
}
int main()
{
int k=3;
int primes[10001] = {0};
primes[0]=2;
int l=sizeof(primes)/sizeof(primes[0]);
int N=0;
while (N < l){
if(isPrime(k, primes, 10001)==true){
primes[++N]=k;
}
k+=2;
}
cout << l << endl;
return 0;
}