c ++程序中的分段错误错误

Segmentation fault error in c++ program

下面有一段c++代码。

#include<iostream>
#include <cstring>
using namespace std;
void f(const char* s)
{
    char* temp;
    strcpy(temp,s);

    cout<<temp<<endl;
}
int main()
{
    f("HELLO");
    return 0;
}

当我编译它时:

g++ -o output main.cpp

编译没有任何错误。但是当我 运行 它与 ./output
它给出了一个错误 Segmentation fault (core dumped)
有什么问题吗??
PS:
OS 是 Ubuntu 14.04 LTS

您没有为 temp 分配任何 space。它被定义为指向 char 类型的指针,并将被初始化为某个随机值。当您 strcpy 您的字符串到该 char 指针指向的内存中时,它会尝试将字节从您的字符串 "HELLO" 复制到该内存中,这几乎肯定是无效的。

要更正此问题,请确保 temp 已分配一些实际存储空间。 char temp[buffer_size] 或使用 mallocnew。或者因为这是 C++ 而不仅仅是 C,所以使用 C++ 标准库中的 std::string 类型。

函数f() 的第一行没有为字符串分配存储空间。 所以 temp 是一个未初始化的指针。结果是未定义的行为。

您将其标记为 C++,因此您可能会考虑:

void f(const char* s)
{
   std::string temp(s);
   std::cout<<temp<<std::endl;
}

效果很好。