来自shared_ptr的C ++参考中的示例的分段错误

时间:2015-05-21 19:13:57

标签: c++ c++11

我从jasmine获取示例代码并在本地编译,编译如下:

  Base::Base()
  Derived::Derived()
Created a shared Derived (as a pointer to Base)
  p.get() = 0x608029, p.use_count() = 1
Segmentation fault

当我运行它时,我得到以下输出:

function R = inPainting(I, mask)
H = [1 2 1; 2 0 2; 1 2 1];
R = I;

n = 1;
[row,col,~] = find(~mask); %Find zeros in mask (area to be inpainted)
unknown = horzcat(row, col)';
while size(unknown,2) > 0
    new_unknown = [];
    new_R = R;
    for u = unknown
        r = u(1);
        c = u(2);
        nb = R(max((r-n), 1):min((r+n), end), max((c-n),1):min((c+n),end));
        nz = nb~=0;
        nzs = sum(nz(:));

        if nzs ~= 0 %We have non-zero neighbouring pixels. In-paint with average.
            new_R(r,c) = sum(nb(:)) / nzs;
        else
            new_unknown = horzcat(new_unknown, u);
        end
    end
    unknown = new_unknown;
    R = new_R;
end

知道为什么会出现seg故障吗?

我对C ++很新,你通常会如何调试它?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您逐字使用链接页面中的源代码,建议更改命令行:

  1. 使用-std=c++11-std=c++14
  2. 启用pthread库并使编译器可识别线程。
  3. g++ -Wall -std=c++11  -pthread my_file.cpp
    g++ -Wall -std=c++14  -pthread my_file.cpp
    

答案 1 :(得分:0)

该示例遇到“基类没有基类上的虚析构函数”问题。当使用指向Base的指针销毁Derived对象时,代码只需调用Base的析构函数。这是Bad Thing(TM)