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]
或使用 malloc
或 new
。或者因为这是 C++ 而不仅仅是 C,所以使用 C++ 标准库中的 std::string
类型。
函数f() 的第一行没有为字符串分配存储空间。
所以 temp 是一个未初始化的指针。结果是未定义的行为。
您将其标记为 C++,因此您可能会考虑:
void f(const char* s)
{
std::string temp(s);
std::cout<<temp<<std::endl;
}
效果很好。
下面有一段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]
或使用 malloc
或 new
。或者因为这是 C++ 而不仅仅是 C,所以使用 C++ 标准库中的 std::string
类型。
函数f() 的第一行没有为字符串分配存储空间。 所以 temp 是一个未初始化的指针。结果是未定义的行为。
您将其标记为 C++,因此您可能会考虑:
void f(const char* s)
{
std::string temp(s);
std::cout<<temp<<std::endl;
}
效果很好。