C++ c++;出现奇怪的分段错误 描述

C++ c++;出现奇怪的分段错误 描述,c++,segmentation-fault,undefined-behavior,C++,Segmentation Fault,Undefined Behavior,SFDD是我在SFDD/src/中创建的一个类,下面是用于测试这个类SFDD的文件test0.cpp #包括 #包括 #包括“SFDD.h” int main(int argc,字符**argv){ 向量变量_阶; int var_no=18; 对于(inti=1;我将文件保存为“vtree”); 经理m(v); SFDD sfdd1=m.sfddZero();//创建一个零SFDD SFDD sfdd2=m.sfddOne(); SFDD sfdd3=m.sfddVar(3); SFDD-sf

SFDD是我在SFDD/src/中创建的一个类,下面是用于测试这个类SFDD的文件
test0.cpp

#包括
#包括
#包括“SFDD.h”
int main(int argc,字符**argv){
向量变量_阶;
int var_no=18;
对于(inti=1;我将文件保存为“vtree”);
经理m(v);
SFDD sfdd1=m.sfddZero();//创建一个零SFDD
SFDD sfdd2=m.sfddOne();
SFDD sfdd3=m.sfddVar(3);
SFDD-sfdd4=m.sfddVar(11);
SFDD sfdd6=sfdd3.和(sfdd4,m,真);
sfdd6.将文件另存为dot(“f=x11和x3”);//导出sfdd6

cout您应该了解的概念是,在您的环境中,假设您的代码在某个时候调用了这样的行为是非常安全的,它有时会导致程序由于分段错误而突然终止,有时则不会


要解决此问题,您需要一个类似的工具。使用此工具或针对您的操作系统和环境的等效工具,您应该能够找到违规发生的确切位置,并解决出现和消失的明显随机分段错误,具体取决于代码中与实际问题没有任何关系的部分。

您应该了解的概念是,在您的环境中,假设您的代码在某个点调用此类行为是非常安全的,它有时会导致程序由于分段错误而突然终止,有时则不会


要解决此问题,您需要一个类似的工具。使用此工具或针对您的操作系统和环境的等效工具,您应该能够找到冲突发生的确切位置,并解决出现和消失的明显随机分段错误,具体取决于代码中与实际问题没有任何关系的部分

“这意味着它可以工作”,你显然不熟悉未定义的行为。请你的问题提供一个答案。我也不相信链接上的代码,它的风格很糟糕,即使是主观的,坏的风格意味着不好的品味,坏的品味意味着不好的质量。你试图打开文件“dotG/test0/f=x11_和_x3.dot”“,但您从不检查它是否已创建。
f.open()
不会为您创建子目录,文件名中的等号可能有效,但可疑。第二个seggie可能出现在对
sfdd8的调用中。将文件另存为\u dot()
。很抱歉,我的问题让人困惑。“它有效”意味着我运行“/test0”很多时候,分割错误从来不会出现,我检查输出的点文件,它们都如我所愿。所以我认为我的程序可以工作。所以第二个问题对我来说是最令人困惑的,为什么注释不相关的对象会导致seg错误。“这意味着它可以工作”,您显然不熟悉未定义的行为。请将您的问题提供给我。另外,我不相信链接中的代码,它的样式很糟糕,即使是主观的,坏样式意味着不好的品味,坏品味意味着不好的质量。您尝试打开文件“dotG/test0/f=x11_和_x3.dot”,但您永远不会检查是否创建了它。
f.open()
不会为您创建子目录,文件名中的equals签名可能有效,但它是可疑的。调用
sfdd8.save\u file_dot()
。抱歉,我的困惑问题。“它有效”表示我运行“/test0”很多时候,分段错误从未出现,我检查了输出点文件,它们都如我所愿。所以我认为我的程序可以工作。所以第二个问题对我来说是最令人困惑的,为什么注释不相关的对象会导致seg错误。这也可能值得添加
-g
标志(Clang和GCC都有这个标志,在使用它们时表示相同)到编译过程中公开调试符号(以及valgrind消息的行号)@mdziekon假设OP将阅读valgrind的文档,那么这将在其中进行解释。但在这里提及这也是一个好主意,因此感谢您的评论。valgrind非常有用,我对我所有的测试代码进行了评论,除了只创建类的一个对象外,仍然检测到内存泄漏。我知道这可能是由构造函数或de引起的我定义的类的structor。可能还需要在编译过程中添加
-g
标志(Clang和GCC都有此标志,使用它们时的含义相同),以公开调试符号(以及valgrind消息的行号)@mdziekon假设OP将阅读valgrind的文档,那么这将在其中进行解释。但在这里提及这也是一个好主意,因此感谢您的评论。valgrind非常有用,我对我所有的测试代码进行了评论,除了只创建类的一个对象外,仍然检测到内存泄漏。我知道这可能是由构造函数或de引起的我定义的类的构造函数。
fang@ubuntu:~/Desktop/Link to GitHub/SFDD$ ./test0
Haha 1
Haha 2
Haha 3
sfdd6.save_file_as_dot("f=x11_and_x3");  // export sfdd6
fang@ubuntu:~/Desktop/Link to GitHub/SFDD$ ./test0
Haha 1
Segmentation fault (core dumped)
SFDD sfdd1 = m.sfddZero();  // create a Zero SFDD
fang@ubuntu:~/Desktop/Link to GitHub/SFDD$ ./test0
Haha 1
Haha 2
Segmentation fault (core dumped)