CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

最近被指针弄糊涂了,下面是一段代码,请各位高手看看,谢谢啦!

楼主xuyun11141(用心工作,用心生活)2004-12-03 13:57:04 在 C/C++ / C++ 语言 提问

char   *test();  
  void   Test3(void);  
  void   main()  
  {  
  char   *test1   =   NULL;  
   
  test1   =   test();  
  cout<<test1<<endl;  
  //delete   test1;         //请问为什么不能用这条语句?如果不用会不会发生内存泄露?....1  
  test1   =   NULL;  
  Test3();  
  cout<<endl;  
   
  }  
   
  char   *test()  
  {  
  char   *test   =   NULL;  
  test   =   new   char;  
  strcpy(test,"test       test");  
  return   test;  
  }  
  char   *GetMemory3(int   num)  
  {  
  char   *p   =   (char   *)malloc(sizeof(char)   *   num);  
  return   p;  
  }  
  void   Test3(void)  
  {  
  char   *str   =   NULL;  
  str   =   GetMemory3(100);  
  strcpy(str,   "hello");  
  cout<<   str   <<   endl;  
  free(str);         //为什么这里可能释放内存吧上面就不能用呢??       .....   2  
  }  
   
  请问为什么1   不能,而2却可以,难道是C和C++在这方面有不同?  
  问题点数:80、回复次数:13Top

1 楼carylin(林石)回复于 2004-12-03 14:04:38 得分 8

1也可以用,不过应该把  
  delete   test1;  
  改成  
  delete   []test1;  
  还有把  
  test   =   new   char;  
  改成  
  test   =   new   char[50];   //不是申请一个字符,而是字符串  
  Top

2 楼avalonBBS("︶.︶メ)→( ̄ε ̄メ)回复于 2004-12-03 14:05:08 得分 10

#include   <stdio.h>  
  #include   <iostream>  
  using   namespace   std;  
  =======================我在dev   c++下编译没任何问题啊  
  另你的char   *test()  
  函数中test   =   new   char;//有误啊  
  Top

3 楼steedhorse(晨星)回复于 2004-12-03 14:07:08 得分 10

char   *test()  
  {  
  char   *test   =   NULL;  
  test   =   new   char;  
  strcpy(test,"test       test");  
  return   test;  
  }  
  这个函数有问题,你只分配了一个字符的空间,却使用strcpy往里拷贝了十多个字符长的字符串。可是申请16个,拷贝你那个"test       test"就足够了。  
  test   =   new   char[16];  
  1必须有的,但问题是test函数也得没问题才行。  
  不过如果申请多个空间,删除的时候应该使用:  
  delete[]   test1;  
   
  char   *GetMemory3(int   num),这个不错,申请了100个字符的空间。Top

4 楼zhouyong0371(小周周)回复于 2004-12-03 14:09:58 得分 10

#include   <iostream.h>  
  #include   <malloc.h>  
  #include   <string.h>  
  char   *test();  
  void   Test3(void);  
  void   main()  
  {  
  char   *test1   =   NULL;  
   
  test1   =   test();  
  cout<<test1<<endl;  
  delete   []   test1;         //释放  
  test1   =   NULL;  
  Test3();  
  cout<<endl;  
   
  }  
   
  char   *test()  
  {  
  char   *test   =   NULL;  
  test   =   new   char[12];//这样就没有问题了,你的代码只申请了一个byte的空间,越界了  
  strcpy(test,"test       test");  
  return   test;  
  }  
  char   *GetMemory3(int   num)  
  {  
  char   *p   =   (char   *)malloc(sizeof(char)   *   num);  
  return   p;  
  }  
  void   Test3(void)  
  {  
  char   *str   =   NULL;  
  str   =   GetMemory3(100);  
  strcpy(str,   "hello");  
  cout<<   str   <<   endl;  
  free(str);         //为什么这里可能释放内存吧上面就不能用呢??       .....   2  
  }  
  Top

5 楼xuyun11141(用心工作,用心生活)回复于 2004-12-03 14:26:07 得分 0

哦,果然如上各位高手所说,我再想问一个问题,如果我不知道这个字符串的长度,应该如何为该   字符串申请内存?Top

6 楼steedhorse(晨星)回复于 2004-12-03 14:42:47 得分 6

没有办法,只能申请长一些,或者使用strncpy。  
  Top

7 楼qfxx(秋风萧萧)回复于 2004-12-03 14:45:23 得分 6

在test1函数中使用strlen  
  char*   test(){  
  int   i   =   strlen("test       test");  
  char   *str=new   char[i+1];//别忘了字符串结束标志  
  strcpy(...);  
  return   str;  
  }Top

8 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-12-03 15:10:30 得分 6

嗯,你需要用数组来存放,你new只申请了一个字符空间Top

9 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-12-03 15:17:31 得分 0

长度不确定,就申请多一点Top

10 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2004-12-03 15:22:37 得分 6

hehe   是喔    
  new   char...才一個byte...Top

11 楼homtipo()回复于 2004-12-03 21:02:03 得分 6

你的test1都没有用new分配空间,用delete干吗?这是要配对出现的。  
   
  还有你的test只分配了一个char地址空间,却要放这么多东东,虽然能通过,但是后面的内容都会丢失的。  
   
  而GetMemory3(100)分配了100个char空间,你可以看看它的源程序,用free可以。Top

12 楼greenteanet(扎扎实实打基础,保持一颗平常心。)回复于 2004-12-03 22:44:33 得分 6

多分配点空间吧,你可以动态的分配内存啊..Top

13 楼aa1298(萧萧)回复于 2004-12-03 22:50:34 得分 6

分配的空间不够大Top

相关问题

  • ============我被弄糊涂了=============
  • 弄糊涂了的问题
  • 俩段代码返回指针问题。
  • 返回指针的函数--附代码
  • 我要将一段C++代码转成VB代码(指针, VC++, VB, Windows API)
  • 我要将一段C++代码转成VB代码(指针, VC++, VB, Windows API)
  • 用指针来缩短代码编写长度?
  • 用如下代码为何得不到状态条指针?
  • 看下这段代码, 关于指针的
  • 关于释放指针内存的问题,代码如下:

关键词

  • 函数
  • 字符
  • null
  • test
  • 申请
  • 空间
  • 问题
  • char
  • include

得分解答快速导航

  • 帖主:xuyun11141
  • carylin
  • avalonBBS
  • steedhorse
  • zhouyong0371
  • steedhorse
  • qfxx
  • oyljerry
  • beyondtkl
  • homtipo
  • greenteanet
  • aa1298

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo