获取用户存储segfault错误
Getting User store segfault error
我收到一个大型卷积运算的错误"User store segfault @ 0x000000007feff598
"。我已经将结果数组定义为
int t3_isize = 0;
int t3_irowcount = 0;
t3_irowcount=atoi(argv[2]);
t3_isize = atoi(argv[3]);
int iarray_size = t3_isize*t3_irowcount;
uint64_t t_result[iarray_size];
我注意到,如果数组大小小于2^16 - 1
,操作不会失败,但对于2^16
或更高的数组大小,我会得到segfault错误。
知道为什么会发生这种事吗?我该如何纠正?
“我注意到,如果数组大小大于2^16-1,操作不会失败,但对于2^16或更大的数组大小,我会得到segfault错误”
↑看起来有点自相矛盾。
但可能您只是在堆栈上分配了一个太大的数组。使用动态内存分配(例如,只需切换到使用std::vector
)可以避免该问题。例如:
std::vector<uint64_t> t_result(iarray_size);
顺便说一句,我会放弃像前缀一样的匈牙利符号。例如,t_
读起来就像这是一种类型。匈牙利表示法的时代是20世纪80年代末,其目的是支持微软的程序员工作台,这是一个现在已经停产(很长时间)的产品。
您可能为堆栈声明了太大的数组。每个8字节的216元素相当多(512K字节)。
如果您只需要静态分配,请将数组移动到文件范围。
否则,请考虑使用std::vector
,它将从堆中分配存储并为您管理它。
使用malloc()解决了这个问题。
uint64_t* t_result = (uint64_t*) malloc(sizeof(uint64_t)*iarray_size);
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 使用clang编译时regex-segfault,可能存在编译器错误
- 是否可以在异常(SEGFAULT)错误后自动重新启动程序
- 获取用户存储segfault错误
- 为什么if语句中未定义的参数不会导致segfault或其他错误
- OpenMPI MPI_Gather segfault或断言错误
- 自定义字典类C++中的Segfault错误
- 捕获 Segfault 或任何其他错误/异常/信号C++例如在 Java 中捕获异常
- 分段错误 - SEGFAULT - 在纯虚拟C++上.为什么