| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 577 人关注过本帖
标题:C/C++内存分配问题
只看楼主 加入收藏
yuanhong
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-4-2
收藏
 问题点数:0 回复次数:3 
C/C++内存分配问题
#include <iostream >
#include <string >
#include <stdlib.h >
using namespace std;
void f1(char *);
char* f2();
char* f3();
void f4(char **,int );
void f1(char * str){
str=(char *)malloc(100);
printf("%p\n",str);
}
char *f2(){
char str[]="abc";
return str;
}
char *f3(){
char *str="abc";
return str;
}
void f4(char **p,int m)
{
*p=(char *)malloc(m);
}
int main(){
char *a=NULL;
//f1(a); //为什么这里程序会崩溃
//a=f2();//为什么这里会输出乱码
//a=f3(); //这个和下面那个为什么能正确输出字符串
f4(&a,100);
strcpy(a,"Hello");
printf(a);
return 0;
}


另还有一个程序
int main()
{
char *str=NULL;
str=(char *)malloc(100);
free(str);
if(str!=NULL){
strcpy(str,"Hello");
printf(str);
}
return 0;
}为什么这个程序能正确执行
搜索更多相关主题的帖子: 内存 分配问题 
2007-10-27 19:35
neufcl
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-10-23
收藏
得分:0 
以下是引用yuanhong在2007-10-27 19:35:25的发言:
#include <iostream >
#include <string >
#include <stdlib.h >
using namespace std;
void f1(char *);
char* f2();
char* f3();
void f4(char **,int );
void f1(char * str){
str=(char *)malloc(100);
printf("%p\n",str);
}
char *f2(){
char str[]="abc";
return str;
}
char *f3(){
char *str="abc";
return str;
}
void f4(char **p,int m)
{
*p=(char *)malloc(m);
}
int main(){
char *a=NULL;
//f1(a); //为什么这里程序会崩溃
//a=f2();//为什么这里会输出乱码
//a=f3(); //这个和下面那个为什么能正确输出字符串
f4(&a,100);
strcpy(a,"Hello");
printf(a);
return 0;
}


另还有一个程序
int main()
{
char *str=NULL;
str=(char *)malloc(100);
free(str);
if(str!=NULL){
strcpy(str,"Hello");
printf(str);
}
return 0;
}为什么这个程序能正确执行

第一个程序你说的问题都不存在。我可以正确运行。
第二个程序
free掉的只是那块空间
str的值并没有改变
所以可以有Hello的结果输出


学好C++
2007-10-27 20:06
yuanhong
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2006-4-2
收藏
得分:0 

呵呵,第一程序我注释掉了,我想说的是注释掉的那些不能正确运行,肯定有错误,不过已经理解了。呵呵,只因有点复杂,不说了,如果有想知道的我把解释写上
解释在这里,
呵呵,里面还有我名字,尴尬了
http://topic.csdn.net/u/20071027/19/6ae6b73b-bf18-40a9-9b66-5ead2bc258c9.html


2007-10-27 21:06
neufcl
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2007-10-23
收藏
得分:0 
回复:(yuanhong)呵呵,第一程序我注释掉了,我想说...
我就是把你注释掉的程序行执行了下。是可以运行的

学好C++
2007-10-27 21:15
快速回复:C/C++内存分配问题
数据加载中...
 
   



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

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