小编use*_*105的帖子

具有相同名称,不同定义的结构:使用-O2进行分段故障

我在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)

c++ struct segmentation-fault translation-unit

1
推荐指数
1
解决办法
163
查看次数