我在C编程中非常新,我正在玩malloc()
,free()
和指针分配,以便更好地掌握它。C指针分配malloc()和free()C
这里是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
void
array_fill(int * const arr, size_t n)
{
size_t i;
for (i = 0; i < n; i++)
arr[i] = i;
}
void
array_print(const int * const arr, size_t n)
{
size_t i;
for (i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
}
int
main(int argc, char ** argv)
{
int * p1, * p2;
p1 = (int *) malloc(SIZE * sizeof(int));
p2 = p1;
array_fill(p1, SIZE);
array_print(p1, SIZE);
array_print(p2, SIZE);
printf("\nFREE(p1)\n");
free(p1);
array_print(p2, SIZE);
return (0);
}
与gcc test.c -o test
编译它,并./test
运行它:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
FREE(p1)
0 0 2 3 4 5 6 7 8 9
p2 = p1
,岂不是p2
指向相同的值p1
?- 解放后
p1
为什么我仍然可以打印p2
(索引1的值是不同的)?我是否会导致内存泄漏或指针悬空? - 这是正常的能打印
p2
即使p1
被释放?
可能的重复:[我们如何能够在释放内存后访问指针?](http://stackoverflow.com/questions/22033822/how-are-we-able-to-access-the-pointer-解除后分配内存) –