为什么这个unsigned int会出现段错误
Why am I getting segfault from this unsigned int?
我试图初始化一个整数数组并将所有元素设置为1。我需要数组的上界为4294967295,或者32位unsigned int
的最大可能数。
这对我来说似乎是一个微不足道的任务,它应该是,但我遇到了segfault
。我可以运行空的for
循环,它似乎工作得很好(虽然很慢,但它处理了近43亿个数字,所以我不会抱怨)。当我试图在循环内执行任何类型的操作时,问题似乎出现了。我下面的指令- primeArray[i] = 1;
-导致segfault
错误。据我所知,这应该不会导致数组溢出。如果我注释掉那行,没有segfault
。
很晚了,我疲惫的眼睛可能只是错过了一些简单的东西,但我可以再用一副。
这是我得到的:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <stdint.h>
#define LIMIT 0xFFFFFFFF;
int main(int argc, char const *argv[])
{
uint32_t i;
uint32_t numberOfPrimes = LIMIT; // hardcoded for debugging
int *primeArray = (int*) malloc(numberOfPrimes * sizeof(int));
for (i = 0; i < numberOfPrimes; ++i) {
primeArray[i] = 1;
}
}
检查来自malloc()
的返回代码,以确保实际分配了数组。我怀疑下面的测试会失败:
int *primeArray = (int*) malloc(numberOfPrimes * sizeof(int));
if (primeArray != NULL) { /* check that array was allocated */
for (i = 0; i < numberOfPrimes; ++i) {
primeArray[i] = 1;
}
}
您的malloc
调用从系统请求16g内存。如果您没有那么多的空闲虚拟内存,或者您在任何32位系统上运行,则调用将失败。如果您不检查malloc
是否失败(您的代码没有检查),那么数组将是NULL
,并且后续对其元素的任何访问都将导致分段错误。
如果你真的需要处理这么大的数组,你要么需要一个64位的系统,有很多内存,要么重写你的程序来处理一个更小的工作集,并将其余的保存到磁盘。
相关文章:
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 如何摆脱C ++中的分段错误错误?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 如何解决分段错误错误C++
- 作为参数模板的模板类:MSVC 错误 - 错误 C2977:模板参数过多 (C++98)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 卷曲给出分段错误错误
- 无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"
- 错误错误 C2872:"布尔值":kinect.h 的不明确符号
- C++打印模板容器错误(错误:"运算符<<"的不明确重载)理解?
- 结构的分割错误错误
- 为什么此代码返回分段错误错误?
- 错误错误:无法编译内置功能
- 分段错误错误C++
- C++ 1Z 错误:错误:演绎指南中声明中的显式限定
- 使用对数据类型的向量的哈希表中的分段错误错误
- 为什么此代码会导致分段错误错误
- JNA结构字段值错误
- C++段故障错误