这么简单几行程序怎么就不对了呢?
#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




