c++ - 段错误 : Why?

标签 c++ segmentation-fault

我有这段代码可以按预期编译和工作:

#include <iostream>

using namespace std;

int fun(int* p){
    *p = 20;
    return 1;
}

int main(){
    int* number;    
    *number =10;

    cout << "before: "<<*number<<endl;
    fun(number);
    cout << "after: "<<*number<<endl;
    return 1;
}

虽然下面的给出了段错误:

#include <iostream>

using namespace std;

int fun(int* p){
    *p = 20;
    return 1;
}

int main(){
    int test=1; //ADDITION
    int* number;    
    *number =10;

    cout << "before: "<<*number<<endl;
    fun(number);
    cout << "after: "<<*number<<endl;
    return 1;
}

我正在使用 g++ test.cpp -o test 进行编译

谁能解释一下这种行为是从哪里来的?

最佳答案

number 未指向 main() 中的有效内存位置。只是程序声明了一个指针,number,它可以保存一个整数类型的地址。但是,它没有分配/初始化以指向任何整数的位置。

int* number = new int;
*number = 10;

由于程序正在管理资源,它应该使用delete 返回这些资源。

delete number;

如果幸运的话,这两个程序都会出现段错误。

关于c++ - 段错误 : Why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5315073/

相关文章:

javascript - 从 QT Web 服务器处理多个客户端

c++ - 如何使用 RE2 查找匹配字符串的偏移量?

android - 错误 :(49) undefined reference to 'cv::Stitcher::createDefault(bool)' in using OpenCV native in Android

c++ - 基于预加载器的锁跟踪工具中的神秘内存泄漏

C/汇编子程序段错误

c - 从未使用过 strlen 时 strlen 的段错误?

c - [C][Postgresql] PQfinish(conn) 上的段错误线程 2

c++ - C++11 段错误中基于范围的 for 循环,但不是常规 for 循环

c++ - 函数省略结构

c - 解析读入文件并存储在b树中