为啥 C++ 中的以下结构声明会导致退出 127?
Posted
技术标签:
【中文标题】为啥 C++ 中的以下结构声明会导致退出 127?【英文标题】:Why does the following struct declaration in C++ causes exit 127?为什么 C++ 中的以下结构声明会导致退出 127? 【发布时间】:2020-02-02 18:08:53 【问题描述】:我正在尝试解决 USACO 培训页面上的一个问题,我认为我需要以下声明:
const int NMAX=35;
.
.
.
struct type
int x,y;
int mat[2][NMAX][NMAX];
;
使用它,我编写了一个可以在我的计算机上运行的程序,但是当我将源文件发送到 USACO Grader 时,我收到以下错误:
您的程序将数据打印到标准错误。这是数据: 程序:_error_while_loading_shared_libraries:_libm.so.6:_failed_to_map_segment_from_shared_object
由于我不知道这意味着什么,我发送了更多来源评论代码块,试图缩小导致它的原因,我注意到错误是在编译时给出的,在程序运行之前。此外,我看到如果我注释结构声明程序设法编译,如果我不注释结构但我注释三维数组声明,它也会编译。
例子:
struct type
int x,y;
//int mat[2][NMAX][NMAX];
;
(上面的代码没问题)
您能否解释一下这个声明有什么问题以及如何解决它?
非常感谢!
编辑:我最初认为结构本身是错误的根源,但事实是它是紧跟在结构声明之后的数组声明。
const int NMAX=35;
.
.
.
struct type
int x,y;
int mat[2][NMAX][NMAX];
arr[NMAX*NMAX];
检查问题陈述的约束使我能够缩小数组的大小并解决了问题。谢谢大家的帮助!
【问题讨论】:
你在哪里使用这个结构?在函数中声明局部变量? 您需要提供一个minimal reproducible example,包括导致问题的完整源代码,准确粘贴,而不是重新输入。 【参考方案1】:你需要在结构体的右花括号后面加一个分号。
struct type
int x,y;
int mat[2][NMAX][NMAX];
; // <-this semicolon
应该这样做。
【讨论】:
源码中有个分号,只是问题中的代码打错了,不好意思。 我想我找到了钥匙。我正在尝试声明一个长度为 NMAX*NMAX 的结构的数组。也许它不知道如何分配该空间?如果我发送带有初始结构声明但没有数组声明的源,它也可以工作。 @PaulOrasan 这些结构的 NMAX*NMAX 数组超过 1200 万字节,几乎可以肯定对于自动存储(堆栈内存)来说太大了。您需要将该信息放入问题中。一些重现问题的真实代码。 @Blastfurnace 我已经编辑了问题并找到了问题的解决方案。由于我是堆栈溢出的新手,我应该以某种方式将其标记为已解决吗? @PaulOrasan 您可以发布自己的答案并接受。在 Stack Overflow 上这很好。【参考方案2】:已解决:从问题的编辑部分可以看出,问题在于该结构类型的数组的内存分配,而不是结构声明本身,它与问题的约束有关。
【讨论】:
以上是关于为啥 C++ 中的以下结构声明会导致退出 127?的主要内容,如果未能解决你的问题,请参考以下文章
为啥类中的 stringstream 成员会导致编译时错误? [复制]