Geo*_*y90 5 c malloc pointers pointer-to-pointer
我已经使用 malloc 模拟了一个堆栈,以创建一个 MAX 元素数组并将其分配给一个指针。然后我创建了一个指向第一个指针的第二个指针,以便能够来回导航,执行推送和弹出。
int * stack= (int *) malloc(MAX * sizeof(*stack));
int * stack_ptr = stack;
Run Code Online (Sandbox Code Playgroud)
最后,我删除包含数组的指针,使用
free (stack);
Run Code Online (Sandbox Code Playgroud)
删除数组(stack)后,stack_ptr指向一个没有内容的地址,对吗?
即使程序恰好在此之后终止,这是否会导致内存泄漏或任何类型的问题?
删除数组(堆栈)后,stack_ptr 指向一个没有内容的地址,对吗?
之后free(stack);,尝试执行*stack_pt未定义行为(UB)。所指向的内容stack_pt 可能是好的、坏的或丑陋的,或者只是导致代码崩溃。UB 试图找出答案。
即使程序恰好在之后终止,这是否会导致内存泄漏或任何类型的问题?
本身拥有前一个有效指针的未更改副本,stack_pt既不是泄漏,也不是 UB。只是不要使用stack_pt。
NULL通常在释放后,使用指针是一个很好的做法。
int * stack= (int *) malloc(MAX * sizeof(*stack));
int * stack_ptr = stack;
...
free (stack);
stack = NULL;
stack_ptr = NULL;
Run Code Online (Sandbox Code Playgroud)
旁白:建议分配引用对象的大小,而不是类型,并放弃不需要的强制转换。
// int * stack= (int *) malloc(MAX * sizeof(*stack));
int *stack = malloc(sizeof *stack * MAX);
Run Code Online (Sandbox Code Playgroud)