首页 新闻 会员 周边 捐助

关于realloc函数的问题,希望懂的高手解析一下,悬赏!感激不尽!

0
悬赏园豆:140 [已解决问题] 解决于 2015-04-30 12:12

在整理自己的工具库的时候忽然发现了这个问题!(linux系统)

我真的实在是不明白为什么了?有没有懂realloc的高手帮我分析一下问题,感激不尽,我这是第一次在博客园求助,有木有给力的高手呢

问题好像是出在realloc函数,根据tracestack最后追踪到了问题在/lib64/libc.so.6这个应该类似于windows下的dll吧?具体内部都是二进制码摸不透。

第一段代码是关于我的动态分配内存的栈的简单代码:

 1 #ifndef C_STACK_H_INCLUDED
 2 #define C_STACK_H_INCLUDED
 3 
 4 #define ASSERT_MODE
 5 #ifdef NO_ASSERT_MODE
 6 #undef ASSERT_MODE
 7 #endif
 8 
 9 
10 int size_stack=0;
11 int top_stack=0;
12 
13 int*create_stack(int size){
14     size_stack=size;
15     top_stack=0;
16     return (int*)malloc(sizeof(int)*size);
17 }
18 
19 void destroy_stack(int*stack){
20     top_stack=0;
21     size_stack=0;
22     free(stack);
23     stack=NULL;
24 }
25 
26 void insert_stack(int**stack,int v){
27     (*stack)[top_stack++]=v;
28     if(top_stack==size_stack){
29         size_stack*=2;
30         *stack=(int*)realloc(*stack,size_stack);
31     }
32 }
33 
34 int remove_stack(int**stack){
35 #ifdef ASSERT_MODE
36     assert(top_stack>=0);
37 #endif
38     int tmp=(*stack)[--top_stack];
39     return tmp;
40 }
41 
42 #endif // C_STACK_H_INCLUDED
View Code

第二段代码是main函数入口:(跑这段代码会在最后一个insert_stack崩掉)

 1     int*s=create_stack(1);
 2     insert_stack(&s,1);
 3     insert_stack(&s,2);
 4     insert_stack(&s,3);
 5     insert_stack(&s,4);
 6     insert_stack(&s,5);
 7     insert_stack(&s,6);
 8     insert_stack(&s,7);
 9     insert_stack(&s,8);
10     remove_stack(&s);
11     remove_stack(&s);
12     remove_stack(&s);
13     remove_stack(&s);
14     remove_stack(&s);
View Code

求解释一下原因~~~

 

追加:不要跟我说改成malloc和memcpy的形式...不要太无脑

Kimmin的主页 Kimmin | 初学一级 | 园豆:88
提问于:2015-04-30 00:56
< >
分享
最佳答案
1

请仔细对比下你写的这两条语句:

malloc(sizeof(int)*size)realloc(*stack,size_stack)

如果让你改成 malloc 和 memcpy 的话,你要是有脑的话应该能立即看出问题来

收获园豆:140
Launcher | 高人七级 |园豆:45050 | 2015-04-30 09:33

好的 是我无脑  这个问题竟然能困扰我一晚上

Kimmin | 园豆:88 (初学一级) | 2015-04-30 12:11

不行呀 我把参数改成了size_stack*sizeof(int)竟然还是会崩掉,大神再帮我看下好吗?

Kimmin | 园豆:88 (初学一级) | 2015-04-30 15:42

@guguli: 你是说还是在最后一个insert_stack崩掉吗?

Launcher | 园豆:45050 (高人七级) | 2015-04-30 15:52

@Launcher: 对对对,你试一试看看怎么样?这个问题看起来很基础,但是很缠人呀 搞不懂!!虚心求教!

Kimmin | 园豆:88 (初学一级) | 2015-04-30 15:55

@Launcher: Debug到了最后一个INSERT—STACK参数监视的时候还是8*4应该是正确的呀

Kimmin | 园豆:88 (初学一级) | 2015-04-30 15:56

@guguli: 我测试了下,没有问题。

Launcher | 园豆:45050 (高人七级) | 2015-04-30 16:14
其他回答(1)
0

怎么不检查一下realloc是否返回NULL?

XiaoFaye | 园豆:3087 (老鸟四级) | 2015-04-30 06:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册