c++ - 在另一个结构中释放一个结构内的指针

标签 c++ pointers struct dynamic-memory-allocation delete-operator

我得到了以下释义问题: “仅使用变量 q,为结构点内的整数指针动态分配内存”。我写了下面的代码,但是,我无法删除动态分配的整数,因为它给我一个运行时错误,说我正在删除不存在的东西。我检查了内存地址 ((*q) -> x -> x) 和 srcX 赋值后,地址相同。我怎样才能释放这个动态分配的整数?

#include <iostream>

using namespace std;

struct point {
    int *x;
    int *y;
};

struct line {
    struct point *x;
    struct point *y;
};

void create_line (int srcX, int srcY, int dstX, int dstY) {
    struct line *p;
    struct line **q = &p;
    (*q) = new line;
    (*q) -> x = new point;
    (*q) -> x -> x = new int;
    (*q) -> x -> x = &srcX;
    cout << *((*q)->x->x) << endl;
    delete (*q)->x->x; // Causing run-time error
    delete (*q)->x;
    delete (*q);
}

int main(){
    create_line(2,3,7,8);
    return 0;
}

最佳答案

你好像有点糊涂了

(*q) -> x -> x = new int;
(*q) -> x -> x = &srcX;

第一行将 x 指向一个新的整数,但下一行将其覆盖为指向 srcX,丢失了之前分配的内存。因为 x 指向的不是用 new 创建的,它不应该是 deleted,因此错误。

如果您已经拥有指向的内容,则无需使用 new 进行分配(除非您打算将值复制到新创建的内存中)。

关于c++ - 在另一个结构中释放一个结构内的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46870686/

相关文章:

c++ - 在 C++ 中处理数组的问题

c++ - 如何获取字符串指针的值?

c++ - 澄清列表和删除元素

swift - 循环遍历 Swift 结构以获取键和值

c - 是否可以让所有特定类型的结构引用另一个结构的同一实例? C

string - 使用反射 SetString

c++ - 在没有单调时钟的系统上是否不可能实现一致?

c++ - 将匿名对象作为参数传递时,不会调用任何构造函数

c++ - 核心转储消息未在 STDERR 中捕获

C++:如何使用 thread_local 声明指针变量?