为啥 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?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 CoUninitialize 在退出时会导致错误?

为啥重新声明 std::cout 会导致分段错误?

为啥类中的 stringstream 成员会导致编译时错误? [复制]

C++ 中结构的构造函数导致非零退出代码

为啥包含枚举的 C++ 方法会导致 SWIG/C# 中的 AccessViolationExceptions?

MinGW C++ 使用向量退出值 127