#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; }
free C 动态内存管理 定义于头文件 <stdlib.h> void free( void* ptr ); 解分配之前由 malloc() 、 calloc() 、 aligned_alloc (C11 起) 或 realloc() 分配的空间。 若 ptr 为空指针,则函数不进行操作。 若 ptr 的值不等于之前从 malloc() 、 calloc() 、 realloc() 或 aligned_alloc() (C11 起) 返回的值,则行为未定义。 若 ptr 所指代的内存区域已经被解分配,则行为未定义,即是说已经以ptr 为参数调用 free() 或 realloc() ,而且没有后继的 malloc() 、 calloc() 或 realloc() 调用以 ptr 为结果。 若在 free() 返回后通过指针 ptr 访问内存,则行为未定义(除非另一个分配函数恰好返回等于 ptr 的值)。 free 是线程安全的:它表现得如同只访问通过其参数可见的内存区域,而非任何静态存储。 令 free 解分配内存区域的调用,同步于任何令分配函数分配相同或部分相同区域的后续调用。这种同步出现于任何解分配函数所做的内存访问后,和任何分配函数所做的内存访问前。所有操作每块特定内存区域的分配及解分配函数拥有单独全序。
无运行错误不代表程序没问题,有一定概率的 真实运行环境中有可能会导致其他地方崩溃,我以前遇到过,很难找
先说一下,对是NULL的指针free,不会出错。 所以你的环境是否free(p)之后,把P改写为null? 如果是这样,不会出错。
65,184
社区成员
250,526
社区内容
加载中
试试用AI创作助手写篇文章吧