C++ 获取用户存储错误

C++ 获取用户存储错误,c++,segmentation-fault,C++,Segmentation Fault,对于大型卷积运算,我收到错误“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;

对于大型卷积运算,我收到错误“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);
std::向量t_结果(iarray_大小);


顺便说一句,我会抛弃匈牙利符号,就像前缀一样。例如,
t
读起来好像这是一种类型。匈牙利符号的出现时间是20世纪80年代末,其目的是支持Microsoft的Programmer's Workbench,这是一个现在已经不连续(很长时间)的产品。

您可能声明的堆栈数组太大了。216个元素,每个8字节,相当多(512K字节)

如果只需要静态分配,请将数组移动到文件范围

否则,请考虑使用<代码> STD::vector < /COD>,它将从堆中分配存储并为您管理。使用MalCube(< /P> < P>)解决了这个问题。

            uint64_t* t_result = (uint64_t*) malloc(sizeof(uint64_t)*iarray_size);

您使用的是什么平台,并且您正在尝试将该数组放到堆栈上?该数组是全局数组还是堆栈上?该数组的字节数为8*65536=524288。我闻到堆积如山的味道。你可能会做得很好,因为它很容易成为SO上最好的帖子之一。为了避免进一步混淆,你的意思是小于'2^16-1'。是的,对不起,那是一个错误。如果大小小于2^16-1,则一切正常。即使按照您的建议进行动态内存分配,我也会收到相同的错误。请尝试在向量声明之后放置一个
返回值。如果它没有崩溃,那么问题一定出在下面的代码中。等等祝你好运
iarray\u大小如何声明?您是否记得使用所需的初始大小声明您的
向量
,或者至少在其上调用
resize()
?iarray_大小在前一行中计算,之后不会更改。我这样声明向量:std::vector t_result(iarray_size)@用户3039976是否至少是
iarray\u size
类型
int
或更大?你能编辑你的问题来显示计算结果吗?@user3039976:Hmmm,这看起来很无害。当你试着写一些东西到这里的时候,你(商店)得到的真正的错误肯定是更深的。2^16的边界让人觉得很奇怪,好像有些东西被截断成了一个
短的
或者其他什么。。。但我没有看到任何立即跳出来的东西。