| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 741 人关注过本帖
标题:一个关于地址内存的问题
只看楼主 加入收藏
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
结帖率:92.45%
收藏
已结贴  问题点数:10 回复次数:12 
一个关于地址内存的问题
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);   
strcpy(str, "hello world");
printf(str);
}

请问运行Test函数会有什么样的结果?
答案:程序崩溃。
因为GetMemory并不能传递动态内存,
Test函数中的 str一直都是 NULL。
strcpy(str, "hello world");将使程序崩溃。

对于这个答案,我仍然不是很理解,有高手能解释下吗,为啥str会一直是null呢?
搜索更多相关主题的帖子: 内存 地址 
2010-11-29 19:30
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:2 
程序代码:
#include<stdio.h>

void
GetMemory(char **p)
{
      *p = (char *)malloc(100);
}

void
Test(void)
{
      char *str = NULL;
      GetMemory(&str);
      strcpy(str, "hello world");
      printf(str);
}

int
main(void)
{
      Test();
      getch();
      return 0;
}
其实是个传值与传址的问题
2010-11-29 19:38
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
回复 2楼 xiaomarn
怎么理解?

我是初学者
2010-11-30 09:08
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:0 
str指针是个空指针,没有指向哪块可用的内存区域,那你如何把字符串放到str指针所指向的区域呢?
2010-11-30 09:58
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
*p = str来传递啊

我是初学者
2010-11-30 10:10
君落语
Rank: 1
等 级:新手上路
帖 子:4
专家分:3
注 册:2010-11-26
收藏
得分:0 
初学者过来学习
2010-11-30 14:12
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
继续顶

我是初学者
2010-11-30 17:37
slowlyzl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:85
专家分:170
注 册:2010-10-20
收藏
得分:0 
帮你顶顶 我也很想知道答案
2010-11-30 18:28
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
顶顶

我是初学者
2010-12-01 09:49
cq7610
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:111
注 册:2010-11-17
收藏
得分:6 
其实二楼已经说得很清楚了。

char *p 这是传值
传值的话,不会改变原变量的值,也就是说str始终没有分配到内存,运行起来,程序自然会崩溃。

二楼的代码能正常运行,就在于参数定义为**p,这是传址。在函数里运行,会改变原变量的值。

从这个例子来看,对数据结构接触得很少啊。数据结构里有许多类似定义。建议多看数据结构。:)
2010-12-01 11:53
快速回复:一个关于地址内存的问题
数据加载中...
 
   



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

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