我使用代码 1 出现分段错误的原因可能是什么
What could be the reason I am getting segmentation fault using code 1?
筛子的
埃拉托色尼方法:当我使用代码 1 过滤质数时,我得到了输入16777214的分割错误,而在代码 2 中它不会给出分割错误。分割错误是由于代码 1 的前 2 行,其中我定义了 (bool prime( 和 (memset(。我得到这个错误的原因可能是什么 https://www.interviewbit.com/problems/prime-sum/
//code 1:
vector<int> Solution::primesum(int A){
bool prime[A+1];
memset(prime, true, sizeof(prime));
for (int p=2;p<=sqrt(A);p++){
if(prime[p] == true){
for (int i=p*p;i<=A;i+=p)
prime[i] = false;
}
}
}
````
````
//code 2:
vector<int> Solution::primesum(int A){
vector<bool> prime(A+1);
for(int i=2;i<=sqrt(A);i++){
if(prime[i]==false){
for(int j=i*i;j<=A;j+=i)
prime[j] = true;
}
}
}
````
````
假设变量A
在创建数组之前初始化,数组的内存在堆栈上分配,并且由于堆栈的大小有限,为 16777214 字节分配内存可能会导致堆栈溢出,从而导致分段错误。
另一方面,向量在堆上分配,不会发生相同的问题。
PS:可变长度数组不是标准C++,GCC 将它们实现为非标准扩展。
当任一数组超出索引并且您正在访问非法内存空间时,会发生分段错误。
首先,数组不能以这种方式动态启动。你应该尝试这种方式,
int *prime = new int[length];
其次,也许是为了你的,prime[n+1]
,您的输入值超出了"n"(整数(的限制。 由于您使用的是数据类型int
并且它具有内存限制。尝试使用 long int
.
相关文章:
- 是什么导致了Unity 3D中的"错误线程异常"?
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在C++中创建队列 - 什么是 malloc 错误?
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 没有可行的过载'='错误,可能导致这种情况的原因是什么?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 导致hash_map错误的原因是什么,如何修复它?
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- C++中的"expected unqualified-id"错误是什么?
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 是什么导致 glTexSubImage1D() - 加载纹理时在此示例中出现GL_INVALID_VALUE错误?
- 我的代码中针对 NQueens 问题的错误是什么?
- 这在C++是什么类型的错误?
- 出现这种错误的原因是什么"invalid use of non-static data member "
- 这种错误的原因是什么:将"功能"重新定义为不同类型的符号
- CUDA返回值错误35的含义是什么
- 这个错误可能是什么?ANSI C文件
- 是什么导致macOS Mojave上的GoogleTest链接错误
- 这个代码中的错误是什么,每次都会给我分段错误