我在C++程序中遇到了一个分段错误,当两个C++文件一起编译时,每个C++文件包含一个不同的结构定义(具有相同的名称).
根据这个问题,我理解结构定义仅限于翻译单元(文件及其内容).
但是,在编译时启用-O1或更多时,我遇到了崩溃.以下最小代码再现了段错误.
代码有3个简短的C++文件和2个标题:
// td_collision1.cc
#include <iostream>
#include <vector>
#include <cstdlib>
#include "td1.h"
struct Data
{
long a;
double m1;
double m2;
};
void sz1(void) {
std::cout << "Size of in collision1: " << sizeof(struct Data) << std::endl;
}
void collision1(void) {
struct Data tmp;
std::vector<struct Data> foo;
for (int i=0; i<10; i++) {
tmp.a = 1;
tmp.m1 = 0;
tmp.m2 = 0;
foo.push_back(tmp);
}
}
// td1.h
#include <iostream>
void collision1(void);
void sz1(void);
// td_collision2.cc
#include …Run Code Online (Sandbox Code Playgroud)