使用字符串时c ++初学者分段错误

时间:2014-03-10 16:32:17

标签: c++ string class segmentation-fault

我正在尝试使用std :: string作为函数类型和变量类型来设置基本类,但是使用两者都会给我一个分段错误。如果我删除函数或变量,一切都很好。我确定我犯的是一个非常愚蠢的错误!这是我的代码: main.cpp中

#include <iostream>
#include <cstdlib>
#include <string>
#include "myclass.h"

int main()
{

    myclass obj;
    obj.replace();

    return EXIT_SUCCESS;
};

myclass.h

#ifndef MYCLASS_H_
#define MYCLASS_H_
#include <string>

class myclass
{
    private:
        std::string instruction;

    public:
        myclass();
        std::string replace();
}; 

#endif

myclass.cpp

#include "myclass.h"
#include <iostream>


myclass::myclass()
{
    std::cout<<"I am the constructor"<<std::endl;
}

std::string myclass::replace()
{
    std::cout<<"I replace"<<std::endl;
}

2 个答案:

答案 0 :(得分:2)

你说myclass::replace每次调用时都会返回一个std::string,但你实际上并没有return任何东西!然后发生的事情进入了未定义行为的领域,这通常意味着你的程序行为不端,最终甚至可能kill your cat

解决方案是在函数末尾添加return语句。

答案 1 :(得分:1)

下面

obj.replace();

您已放弃返回值std::string 您可以丢弃返回值。一般来说这不是好的风格,但你总能做到。但实际问题是你没有从replace函数返回任何内容:

std::string myclass::replace()
{
    std::cout<<"I replace"<<std::endl;
    //... return statement is missing
}

溶液:

std::string myclass::replace()
{
    std::cout<<"I replace"<<std::endl;
    return std::string();
}