- 论坛徽章:
- 0
|
本帖最后由 787686358 于 2012-05-25 13:54 编辑
free () 出现 double free or corruption (out): 0x0804b038 *** 这样的问题 然后直接 SIGABRT 信号 宕掉了!
264
265 int listRemove(LIST *list, int pos)
266 {
267 int i;
268
269 list_item_t *item;
270 if (list == NULL || list ->array == NULL) return -1;
271 if (pos <0 || pos >= list ->size) return -1;
272 item = list ->array[pos];
273 if (item ->flag && item ->data)
274 free (item ->data);
275 free (item);
276 if (pos <list ->size-1) {
277 for (i=pos; i<list->size-1; i++)
278 list ->array = list ->array[i+1];
279 list ->array[i+1] = NULL;
280 }
281 list ->size--;
282 return 0;
283 }
284
程序 执行到 free (item) 的时候 出现问题!
问题补充: item 内存是如何申请的!
0
31 LIST *listCreate(int capacity)
32 {
33 int i;
34 LIST *list;
35
36 if (capacity <= 0)
37 capacity = LIST_INIT_CAPACITY;
38
39 list = (LIST *)malloc(sizeof(LIST)); /* 为结构体分配内存,*/
40 if (list==NULL) {
41 printf("\nmalloc is fial\n ");
42 return NULL;
43 }
44 list ->size = 0;
45 list ->capacity = capacity;
46 list ->array =(list_item_t **)malloc(sizeof(list_item_t *) * capacity);
49 if (list ->array == NULL) {
50 printf ("\n malloc is fail\n ");
51 return -1;
52 }
53 for (i=0; i<capacity; i++) {
54 list ->array = NULL;
55 }
56 return list;
57 }
58
128 int _listAdd(LIST *list, void *data, int len, int flag)
129 {
130 list_item_t *item;
131
132
133 if (list == NULL || list ->array ==NULL) return -1;
134 item = (list_item_t *)malloc(sizeof( list_item_t));
135 if (item == NULL) {
136 printf("malloc is fail %d",__LINE__);
137 return -1;
138 }
139 if (data == NULL || len ==0) {
140 data = NULL;
141 len = 0 ;
142 flag = 0;
143 }
144 if (flag) {
145 item ->data = malloc(len);
146 if (item ->data == NULL) {
147 printf("malloc fail %d\n",__LINE__);
106,5 28%
368 printf ("\nAdd ret =%d" ,ret);
谢谢~~
报错 :
76 free(item); /* 释放的是 list_item_t * */
(gdb) p item
$1 = (list_item_t *) 0x804b038
(gdb) n
*** glibc detected *** /home/bsp/gxh/src/demo: double free or corruption (out): 0x0804b038 ***
======= Backtrace: =========
/lib/libc.so.6[0x1bb231]
/home/bsp/gxh/src/demo[0x8048588]
/home/bsp/gxh/src/demo[0x8048db9]
/lib/libc.so.6(__libc_start_main+0xe6)[0x161a66]
/home/bsp/gxh/src/demo[0x80483f1]
======= Memory map: ========
00127000-00147000 r-xp 00000000 fd:00 546 /lib/ld-2.10.1.so
00147000-00148000 r--p 0001f000 fd:00 546 /lib/ld-2.10.1.so
00148000-00149000 rw-p 00020000 fd:00 546 /lib/ld-2.10.1.so
0014b000-002b6000 r-xp 00000000 fd:00 547 /lib/libc-2.10.1.so
002b6000-002b7000 ---p 0016b000 fd:00 547 /lib/libc-2.10.1.so
002b7000-002b9000 r--p 0016b000 fd:00 547 /lib/libc-2.10.1.so
002b9000-002ba000 rw-p 0016d000 fd:00 547 /lib/libc-2.10.1.so
002ba000-002bd000 rw-p 002ba000 00:00 0
004ba000-004e4000 r-xp 00000000 fd:00 560 /lib/libgcc_s-4.4.0-20090506.so.1
004e4000-004e5000 rw-p 00029000 fd:00 560 /lib/libgcc_s-4.4.0-20090506.so.1
00a9c000-00a9d000 r-xp 00a9c000 00:00 0 [vdso]
08048000-0804a000 r-xp 00000000 fd:00 171275 /home/bsp/gxh/src/demo
0804a000-0804b000 rw-p 00001000 fd:00 171275 /home/bsp/gxh/src/demo
0804b000-0806c000 rw-p 0804b000 00:00 0 [heap]
b7fe6000-b7fe7000 rw-p b7fe6000 00:00 0
b7ffe000-b8000000 rw-p b7ffe000 00:00 0
bffeb000-c0000000 rw-p bffeb000 00:00 0 [stack]
2 str2 =bbbbbbbbbbbbb
|
|