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

时间:2015-03-29 17:28:58

标签: c++ runtime-error

下面有一个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运行时 它给出错误分段错误(核心转储)
有什么问题?
PS:
操作系统是Ubuntu 14.04 LTS

2 个答案:

答案 0 :(得分:3)

您没有为temp分配任何空间。它被定义为指向char类型的指针,并将初始化为某个随机值。当你将strcpy字符串放到指针所指向的内存上时,它会尝试复制字符串中的字节&#34; HELLO&#34;在那个几乎肯定无效的记忆中。

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

答案 1 :(得分:0)

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

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

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

工作正常。