| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2376 人关注过本帖
标题:[求助] c语言笔试题
只看楼主 加入收藏
li笨宝宝
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-9-25
收藏
得分:0 
回复:(li笨宝宝)回复:(yinlb1987)[求助] c语言笔...
这是C程序文件的代码`
是关于存储类的,你自己去参见文件,就知道啦

2007-11-08 22:35
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 

看到那么多人都说要用malloc都得包含<alloc.h>
叹口气先
建议大家还是尽量用标准c
要用malloc的时候还是包含<stdlib.h>文件吧


[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2007-11-08 22:45
beachboy
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-11-8
收藏
得分:0 
进来学习
2007-11-08 22:47
frank200
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-11-8
收藏
得分:0 

#include<stdio.h>
#include<alloc.h>
#include<conio.h>
void display(char *str);
void main()
{
char *str=NULL;
display(str);
printf("%s",str);

}
void display(char *str)
{
str=(char *)malloc(100);
str="gskgshdfh";
free(str);
getch();

}
这个程序运行时会发生错误,free()
出现了问题,这个考官还可以

2007-11-08 23:23
做人不厚道
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-11-5
收藏
得分:0 
以下是引用zdhcx在2007-11-8 21:49:49的发言:
晕... 我都晕了,看不懂,才学了几天!


2007-11-09 03:34
做人不厚道
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-11-5
收藏
得分:0 

2007-11-09 03:36
nianshi
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-7
收藏
得分:0 
str=(char *)malloc(100);
表示在内存中开辟一个大小为100个字节的字符数组(假设首地址是:2001),并把2001放入指针str中,此时str指向这个100字节的这数组。

str="gskgshdfh";:
执行完这一句:表示在内存再开辟一个大小为10个字节的字符数组,里面放的串“gskgshdfh”(假设首地址是:2501),并把2501放入str中,此时str指向这个10个字节的字符数组。这样后果:前面开辟的100个字节的数组空间相当于丢失了,或叫内存泄漏,这块空间成了垃圾空间,即无法再访问了,因为唯一指向它的str指针现在已经指向了另外一个10字节的空间。

free(str);
此时再执行释放,因为str中放的是2501,所以释放了是那个10字节的空间,而非那个100字节的空间,实际上那个空间我们已经无法释放了,因为我们已经找不到它了。

说得有些啰嗦,呵呵……

行至水穷处 坐看去起时
C语言QQ群1:51871776  群2:26313099  群3:47145282
2007-11-09 09:31
yamingo
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-11-9
收藏
得分:0 
灌水,本不是我的原意!
2007-11-09 11:40
nearforest
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-11-7
收藏
得分:0 

代码调试观察str值:

void main()
{
char *str=NULL; // 0x00000000
display(str);
printf("%s",str);

}
void display(char *str)
{
str=(char *)malloc(100); //0x00372928
str="gskgshdfh"; //0x00422020
printf("%s",str); //screen:"gskgshdfh"
free(str); //此处死掉
//debug in,死因在_CRTIMP void __cdecl _free_dbg中,如下:
/*
* If this ASSERT fails, a bad pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
*/
// _ASSERTE(_CrtIsValidHeapPointer(pUserData));

getch();
}

所以和楼上的意见相同,同iFreeBSD的有出入.呵呵,估计是编译器的原因吗?应该不会.稍后用GCC试试.


共同进步.
2007-11-09 11:52
nearforest
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-11-7
收藏
得分:0 
to :nianshi

行至水穷处 坐看去起时

用是五笔吧...有空交流一下几个字的打法...比如亨利的heng...

共同进步.
2007-11-09 12:09
快速回复:[求助] c语言笔试题
数据加载中...
 
   



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

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