在C++中,如何删除分配指针的函数之外的结构的指针?[已关闭]

vmjh9lq9  于 2023-02-06  发布在  其他
关注(0)|答案(3)|浏览(127)

3天前关闭。
Improve this question

structure struct_ppl{
    char* name;
    int age;
}people;

void incription(struct_ppl* ppl)
{
    ppl->name = new char[10];
    ...//some codes, but we do not delete ppl->name
}
int main()
{
    people new_ppl;
    inscription(&new_ppl);

    ... //some codes    

    1. delete(&new_ppl.name);
    2. delete(new_ppl.name);
}

在上面的代码中,哪一个删除指针是正确的,1。或2。?或两者都不?谢谢你的提示

ulydmbyx

ulydmbyx1#

使用std::string和成员函数

#include <string>
#include <vector>
#include <iostream>

struct person_t // your struct only holds data for ONE person so ...
{
    std::string name;
    int age;

    ~person_t()
    {
        // no need free memory explicitly, std::string's destructor will do that.
    }

    //make functions that act on data of a struct a member function
    void inscription()
    {
        name = "?";
    }
};

int main()
{
    person_t person;
    person.inscription();

    std::cout << person.name;

    return 0;
}
jdgnovmf

jdgnovmf2#

哪一个删除指针是正确的,1.或2.?还是两者都不删除?
两者都不是,您应该并且必须在从new[]分配时使用delete[]
请注意,代码可能会发生内存泄漏,如果多次调用void incription(struct_ppl* ppl)而没有“释放”并销毁以前分配的char* name,则会泄漏char* name

lrl1mhuk

lrl1mhuk3#

哪一个删除指针是正确的,1.或2.?还是两者都不删除?
两者都不是,因为您正在使用new[]表单动态分配内存,所以您必须使用delete[]表单的相应释放函数。

相关问题