我在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-解除後分配內存) –