1. 程式人生 > >malloc和free——結構體中動態記憶體的管理

malloc和free——結構體中動態記憶體的管理

下面的全部是除錯結果,根據除錯結果說明問題:
(gdb) r
Starting program: /home/gong/program/cprogram/TestStructPoint 

Breakpoint 1, main () at TestStructPoint.c:14
14		stu.name = (char *)malloc(20*sizeof(char));
Missing separate debuginfos, use: debuginfo-install glibc-2.12.90-17.i686
(gdb) p stu
$1 = {name = 0x0, score = 0}
(gdb) p stu.name
$2 = 0x0
(gdb) c
Continuing.

Breakpoint 2, main () at TestStructPoint.c:17
17		strcpy(stu.name,"Jimy");
(gdb) p stu.name
$3 = 0x804a008 ""
(gdb) c
Continuing.

Breakpoint 3, main () at TestStructPoint.c:21
21		pstu = (struct student *)malloc(sizeof(struct student));
(gdb) p stu.name
$4 = 0x804a008 "Jimy"
(gdb) p stu
$5 = {name = 0x804a008 "Jimy", score = 99}
(gdb) p pstu
$6 = (struct student *) 0x0
(gdb) c
Continuing.

Breakpoint 4, main () at TestStructPoint.c:24
24		pstu->name = (char *)malloc(20*sizeof(char));
(gdb) p pstu
$7 = (struct student *) 0x804a020
(gdb) p pstu->name
$8 = 0x0
(gdb) c
Continuing.

Breakpoint 5, main () at TestStructPoint.c:27
27		strcpy(pstu->name,"Jimy");
(gdb) p pstu->name
$9 = 0x804a030 ""
(gdb) c
Continuing.

Breakpoint 6, main () at TestStructPoint.c:31
31		char *p = stu.name;
(gdb) p pstu->name
$10 = 0x804a030 "Jimy"
(gdb) p *pstu
$11 = {name = 0x804a030 "Jimy", score = 99}
(gdb) p p
$12 = 0x854ff4 "|M\205"
(gdb) c
Continuing.

Breakpoint 7, main () at TestStructPoint.c:32
32		char *p1 = (char *)0x804a008;//具體的地址值	
(gdb) p p1
$13 = 0x855ca0 ""
(gdb) c
Continuing.

Breakpoint 8, main () at TestStructPoint.c:33
33		char *ppstu = pstu->name;
(gdb) p p1
$14 = 0x804a008 "Jimy"
(gdb) p ppstu
$15 = 0x855ca0 ""
(gdb) c
Continuing.

Breakpoint 9, main () at TestStructPoint.c:34
34		char *pp = (char *)0x804a030;//具體的地址值
(gdb) p ppstu
$16 = 0x804a030 "Jimy"
(gdb) p pp
$17 = 0x804826a "__libc_start_main"
(gdb) c
Continuing.

Breakpoint 10, main () at TestStructPoint.c:37
37		free(pstu->name);
(gdb) p pp
$18 = 0x804a030 "Jimy"
(gdb) p pstu->name
$19 = 0x804a030 "Jimy"
(gdb) c
Continuing.

Breakpoint 11, main () at TestStructPoint.c:38
38		free(stu.name);
(gdb) p pstu->name
$20 = 0x804a030 ""
(gdb) c
Continuing.

Breakpoint 12, main () at TestStructPoint.c:39
39		free(pstu);
(gdb) p stu.name
$21 = 0x804a008 "(\240\004\b"
(gdb) p pstu
$22 = (struct student *) 0x804a020
(gdb) p *pstu
$23 = {name = 0x804a030 "", score = 99}
(gdb) c
Continuing.

Breakpoint 13, main () at TestStructPoint.c:41
41		pstu->name = NULL;
(gdb) p *pstu
$24 = {name = 0x0, score = 99}
(gdb) p pstu->name
$25 = 0x0
(gdb) c
Continuing.

Breakpoint 14, main () at TestStructPoint.c:47
47		return 0;
(gdb) p p1
$26 = 0x804a008 "(\240\004\b"
(gdb) p pp
$27 = 0x804a030 ""
(gdb) p pstu
$28 = (struct student *) 0x0
(gdb) p pstu->name
Cannot access memory at address 0x0
(gdb)