人类迷惑问题(误)?浅拷贝的相关问题...为什么同样的代码运行结果不一样

今天有朋友问我题的时候,出现了一个迷惑情况,就是同样的代码,在我这能跑,在ta那就会崩。
之后发现是浅拷贝的相关问题,出问题的相关代码如下:

#include <iostream>
struct Node{
    int data;
    struct Node *next;
};
int main() {
   Node * p = new Node;
   Node *q = new Node ;
   q = p;
   free(p);
   free(q);
    return 0;
}

q=p应该是浅拷贝,即q与p指向的是同一块内存。

如果free(p)再执行free(q),因为q的内存已经被free了再free按理来说应该会报错。

而在朋友的电脑上执行确实会报错,在我这里就是正常结束(无error,return 0)??

求问大佬这可能是什么原因呢?

首先 new 是不是应该对应 delete
其次,对于一个地址来说,第二次delete的时候会产生未定义的行为,也就是任何事都可以发生,所以在删除一个指针后养成置空的好习惯。