| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 849 人关注过本帖
标题:[求助]哪里错误了,内存错误。
只看楼主 加入收藏
thunder_2011
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:100
注 册:2011-4-11
收藏
得分:0 
哎,好人做到底吧,google你都懒得用


就拿你以前的初始化函数来说
void InitStack(SNode *s)
{     
    s=Null;
}   /* 初始化栈*/

其实这个函数一点作用都没有,你可以写个代码试一下
char * p=(char *)malloc(10);
printf("%p\n",p);
InitStack(p);
printf("%p\n",p);

两次打印的p都是同一个值,原因就是我之前说的,函数内部不能改变指针的值,只能够修改指针指向的值,大致的原因就是编译器会为函数的每个参数生成一个临时副本,修改的只是临时副本的值,原有的值并没有被改变(想了解更多的话可以去网上搜一下,应该有很多。。很多)如果想获得修改后的,可以通过返回值,也可以通过传入指针的地址来实现,如果二级指针很难理解的话你也可以修改成通过返回值来实现,就像我给你修改过的push函数那样,返回一个指针。



2011-04-12 14:48
xiaxun
Rank: 1
等 级:新手上路
帖 子:207
专家分:7
注 册:2009-8-30
收藏
得分:0 
以下是引用thunder_2011在2011-4-12 14:48:35的发言:

哎,好人做到底吧,google你都懒得用


就拿你以前的初始化函数来说
void InitStack(SNode *s)
{     
    s=Null;
}   /* 初始化栈*/

其实这个函数一点作用都没有,你可以写个代码试一下char * p=(char *)malloc(10);
printf("%p\n",p);
InitStack(p);
printf("%p\n",p);
两次打印的p都是同一个值,原因就是我之前说的,函数内部不能改变指针的值,只能够修改指针指向的值,大致的原因就是编译器会为函数的每个参数生成一个临时副本,修改的只是临时副本的值,原有的值并没有被改变(想了解更多的话可以去网上搜一下,应该有很多。。很多)如果想获得修改后的,可以通过返回值,也可以通过传入指针的地址来实现,如果二级指针很难理解的话你也可以修改成通过返回值来实现,就像我给你修改过的push函数那样,返回一个指针。
我想问 怎么用return 返回值呢
2011-04-12 20:02
快速回复:[求助]哪里错误了,内存错误。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015367 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved