执行字符串分配时,C++程序崩溃

C++ Program crash when doing string assign

本文关键字:C++ 程序 崩溃 字符串 分配 执行      更新时间:2023-10-16

我有一个奇怪的问题,这是我的代码:

测试.h

#ifndef _test_
#define _test_
#include <iostream>
#include <string>
class Test {
public:
    Test();
    ~Test();
    void addName(std::string _Name);
private:
    std::string Name;
};
#endif // _test_ 

test.cpp

#include "test.h"
Test::Test() {}
Test::~Test() {}
void Test::addName(std::string _Name) {
    std::cout << _Name << std::endl;
    Name = _Name;
    std::cout << _Name << std::endl;
}

main.cpp

#include "test.h"
int main(int argc, char* argv[]) {
    Test* project;
    project->addName("abc");
    return 0;
}

结果:

abc

程序意外地完成了。

这是因为您有一个指向Test对象的指针,但它实际上并不指向任何地方。当您尝试取消引用指针时,这将导致未定义的行为

将对象声明为实际对象,而不是指针:

Test project;
project.addName("abc");

指针project默认初始化,值不确定,因此取消引用它很有可能导致程序异常终止。

尝试创建一个对象并在取消引用之前对其进行分配,如下所示:

#include "test.h"
int main(int argc, char* argv[]) {
    Test* project = new Test;
    project->addName("abc");
    delete project;
    return 0;
}