【问题标题】:Segmentation Fault (code dumped) [duplicate]分段错误(代码转储)[重复]
【发布时间】:2017-04-08 11:13:06
【问题描述】:

我创建了下面描述的两个文件

csvreport.h

int flag = 0; //declared && defined

table.cpp

csvreport* csvreports;
csvreports->flag = 1;

显示分段错误(代码已转储)
任何人都可以解决它??

【问题讨论】:

标签: c++ linux qt


【解决方案1】:

在这段代码中

csvreport* csvreports;
csvreports->flag = 1;

cvsreports 只是声明为一个指针;没有分配内存供它指向。

【讨论】:

    【解决方案2】:

    csvreport* csvreports; 创建未初始化的指针。尝试使用未初始化的指针会导致未定义的行为。

    在堆栈上创建这个变量,没有指针:

    csvreport csvreports;
    

    或者,如果需要指针 - 先分配它:

    csvreport* csvreports = new csvreport;
    csvreports->flag = 1;
    

    或通过现代 C++11 方式使用唯一指针:

    auto csvreports = std::make_unique<csvreport>();
    csvreports->flag = 1;
    

    【讨论】:

    • 对 `CSVReports::CSVReports()' 的未定义引用
    • @GirdhariLal,我的示例假设您有默认构造函数。如果不是这种情况 - 为构造函数提供必要的参数,或定义默认参数。
    【解决方案3】:

    您正在尝试使用已声明但未初始化为指向任何有效对象的指针访问对象的成员。这是导致未定义行为的原因。

    在尝试访问该类型的成员之前先为对象分配内存。

    csvreport* csvreports = new csvreport; // or new csvreport[array_size]
    csvreports->flag = 1;
    

    【讨论】:

    • 对 `CSVReports::CSVReports()' 的未定义引用
    • @GirdhariLal,这是一个完全不同的问题。为此创建另一个帖子,minimal reproducible example
    • 我使用了您的解决方案,然后它显示此错误:未定义引用 `CSVReports::CSVReports()' @R Sahu
    • @GirdhariLal,我明白了。我重复。那是一个完全不同的问题。为此创建另一个帖子,minimal reproducible example
    猜你喜欢
    • 2022-10-13
    • 2021-02-22
    • 1970-01-01
    • 2018-04-03
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多