小编Mem*_*ron的帖子

委托构造函数在使用类字段进行参数时会出现分段错误

实际上,分段错误发生在我试图编译的另一个程序中,这是因为这种行为.

我的问题是:

这是一个错误还是我的错?

可以任何方式重现(即使该something字段是私有的或受保护的),这是我的例子:

main.cc:

#include <iostream>
class Test {
    public:
        const char* something = "SOMETHING HERE!!!";
        Test(const int& number) : Test(something, number) { }
        // XXX: changed `something` to `_something` to make it different
        Test(const char* _something, const int& number) {
            std::cout << _something << std::endl;
            std::cout << number << std::endl; }
        ~Test() { }
};

int main(int argc, char* argv[]) {
    Test te1(345);
    Test te2("asdasdad", 34523);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下是编译时发生的情况:

g++ main.cc -Os -o main
Run Code Online (Sandbox Code Playgroud)

并运行: …

c++ native delegating-constructor raspberry-pi3

11
推荐指数
2
解决办法
666
查看次数

我的引导加载程序无法使用gcc 4.6和4.7 ...仅编译4.5

我在debian squeeze/stable下用gcc4.5 创建了我的bootloader 2年.现在在debian wheezy/sid中无法使用4.6和4.7进行编译,因为从这些中创建更大的部分我希望手工生成最终的二进制文件.这对我来说不是问题,因为在debian wheezy/sid中gcc4.5仍然存在,但我想使用gcc4.6和4.7 编译成为可能.

我像这样生成最终的二进制文件:

源文件编译为:

gcc-4.5 -Wall -O3 -c -m32 -I. -o assemblybin-objects/vga_pm.S.o vga_pm.S
Run Code Online (Sandbox Code Playgroud)

与连接:

ld -nostdlib -T binary.ld assemblybin-objects/vga_pm.S.o ... and other objects here ... -o bootloader.bin
Run Code Online (Sandbox Code Playgroud)

的内容binary.ld是:

OUTPUT_FORMAT("binary","binary","binary")
OUTPUT_ARCH(i386)

SECTIONS
{
. = 0;
.bootloader : {
    . = 0x600;
    *(.bootstrap);
    . = 0x7fa;
    BYTE(0x11);
    BYTE(0x33);
    BYTE(0x55);
    BYTE(0x77);
    BYTE(0x55);
    BYTE(0xaa);
    _bootstrap_end = .;
    . = 0x800;
    *(.sysinit);
    _sysinit_end = .;
    . = 0x1000;
    *(.pages);
    _pages_end = …
Run Code Online (Sandbox Code Playgroud)

linux gcc bootloader

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