| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 542 人关注过本帖
标题:关于数据结构中链串的问题
只看楼主 加入收藏
sophy123
Rank: 1
等 级:新手上路
帖 子:30
专家分:2
注 册:2011-5-8
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:3 
关于数据结构中链串的问题
初始化链串的时候为什么用二级指针作为函数参数?
typedef struct node
{char ch;
struct node *next
}linkstr;

void initstring(linkstr **s)
{  *s=(linkstr *)malloc(sizeof(linkstr));
   (*s)->next=NULL;
}
搜索更多相关主题的帖子: next 
2011-06-05 10:31
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
看不懂。帮顶。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-06-05 11:23
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:20 
楼主这个问题在这个论坛有大牛写过专门的文章的,不知道链接了,我保存了一份。好东西大家分享,望作者见谅。。。
二、 关于动态申请内存的问题    这题出现率极高,60%不为过void GetMemory(char *p)

程序代码:
{
    p = (char *)malloc(100);
}
void Test(void)
{
    char *str = NULL;
    GetMemory(str);
    strcpy(str, "hello world");
    printf(str);
}

请问运行Test函数会有什么 样的结果?

答:试题传入GetMemory( char *p )函数的形参为 字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完
char *str = NULL;
GetMemory( str );
后的str仍然为NULL;


char *GetMemory(void)
{  
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();   
printf(str);
}
请问运行Test函数会有什么 样的结果?
答:可能是乱 码。              char p[] = "hello world";      
     return p;  
的p[]数组为函数内的局部自动变量,在函数返回后,内存已 经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。

void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}

void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");  
printf(str);   
}
请问运行Test函数会有什么 样的结果?
答:
(1)能够输出hello
(2 )Test函数中也未对malloc的内存进行释 放。
(3)GetMemory避免了试题1的问题,传入GetMemory的参数为字符 串指针的指针,但是在GetMemory中执行申请内存及赋值语句
*p = (char *) malloc( num );
后未判断内存是 否申请成功,应加上:
if ( *p == NULL )
{
   ...//进行申请内存 失败处理
}


void Test(void)
{
char *str = (char *) malloc(100);
    strcpy(str, “hello”);
    free(str);      
    if(str != NULL)
    {
      strcpy(str, “world”);
printf(str);
}
}

请问运行Test函数会有什么 样的结果?

答:执行
char *str = (char *) malloc(100);
后未进行内存是否申请成功的判断;另外,在free(str)后未置str为空,导致可 能变成一个“野”指针,应加上:
str = NULL;
2011-06-05 11:57
sophy123
Rank: 1
等 级:新手上路
帖 子:30
专家分:2
注 册:2011-5-8
收藏
得分:0 
回复 3楼 loveshuang
谢了~去消化消化,还想请教一个问题,如何设置链串的节点大小?
2011-06-05 13:01
快速回复:关于数据结构中链串的问题
数据加载中...
 
   



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

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