CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

这么简单几行程序怎么就不对了呢?

楼主xiphias(var)2002-12-01 00:11:49 在 C/C++ / C语言 提问

#include   <stdio.h>  
  #include   <malloc.h>  
  #include   <stdlib.h>  
  #include   <string.h>  
  void   main()  
  {  
  char   *ch   =   (char*)malloc(sizeof(char)*10);  
  if   (!ch)   return;  
   
  ch   =   "abcdefghi";  
  printf   ("\n%s\n",   ch);  
   
  char   *temp   =   (char*)malloc(sizeof(char)*30);  
  if   (!temp)   return;  
   
  strcpy   (temp,   ch);  
  ch   =   (char*)realloc(ch,   sizeof(char)*50);  
  if   (!ch)   return;  
   
  strcpy   (ch,   temp);  
  printf   ("\n%s\n",   ch);  
  free   (ch);  
  free   (temp);  
  }  
  //大哥们帮忙看看哪里不对劲 问题点数:20、回复次数:9Top

1 楼yangq81(杨强)回复于 2002-12-01 00:27:37 得分 5

问题出在   ch="abcdefghi";这一行上,  
  实际上你在此处修改了ch的值,所以在后面用recalloc时会出错。  
  可以将这一行修改为   strcpy(ch,   "abcdefghi");就行了Top

2 楼liuto(B34)回复于 2002-12-01 02:17:13 得分 2

老大,地上掉了一地的内存条了。Top

3 楼wsmall(小白)回复于 2002-12-01 08:57:39 得分 2

怎么不用new呢?  
  这可好用得多?回收内存也方便得多Top

4 楼rainy14f(Java要从娃娃抓起)回复于 2002-12-01 09:28:19 得分 10

char   *ch   =   (char*)malloc(sizeof(char)*10);  
  这一行给变量ch分配了内存空间  
  ch   =   "abcdefghi";  
  但是这一行又使ch指向一个静态存储区,改变了ch的指向。前面分配的空间就丢失了。  
  之后你又用  
  ch   =   (char*)realloc(ch,   sizeof(char)*50);  
  为ch重新分配空间,但是这个时候ch指向的已经不是你前面用malloc给它分配的空间,因为ch=   "abcde..."这句改变了ch的指向。因为此时ch指向静态存储区,静态存储区的值是不能改变的,所以用realloc给它就会导致错误。  
  给字符串赋值要用   strcpy(dest,source)。  
   
  同意   yangq81(杨强)   。Top

5 楼voidmain(void)回复于 2002-12-01 09:39:37 得分 0

来晚了……Top

6 楼Intelement(零℃)回复于 2002-12-01 11:28:44 得分 0

哎   好不容易裸奔到此   想不到还是迟了一步啊……Top

7 楼langzi8818(┤天道酬勤┝爱老婆┦┷我是来学习滴┷)回复于 2002-12-01 12:36:00 得分 0

hahaTop

8 楼whupyf(北方的风)回复于 2002-12-01 13:45:50 得分 0

呵呵,,论述精辟!Top

9 楼lidongliping(月亮)回复于 2002-12-01 14:00:26 得分 1

to   rainy14f(K.R.)    
      看了你的说法,感觉很好,很懂:)  
   
  谢谢!!!Top

相关问题

  • 为什么这么简单的一段EVC程序会不行?
  • 这么简单的小程序都出错?!(十几行,纯属送分)
  • 奇怪!!怎么这么简单的程序都运行不出结果来!
  • webconfig的问题。这么简单的程序怎么也不执行?
  • 为什么这么简单 的画线程序还执行不了,请帮忙分析一下
  • 这么简单的程序为什么不对??
  • 这么简单的程序也出错 linux 无错 vc 有错
  • 这么简单的程序都会出错?大家看一下.
  • 最简单的程序(打印hello,word的程序)不能运行,请指教!!!
  • 简单任务:怎样在程序运行时更改程序的标题?

关键词

  • ch
  • abcdefghi
  • 指向
  • 一行
  • 分配
  • realloc
  • strcpy
  • malloc
  • 空间
  • 静态存储区

得分解答快速导航

  • 帖主:xiphias
  • yangq81
  • liuto
  • wsmall
  • rainy14f
  • lidongliping

相关链接

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

广告也精彩

反馈

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