请问一个关于realloc函数的问题
void main()
{
int *p;
p=new int[1];
p[0]=1;
p=(int*)realloc(p,2);
p[1]=2;
}
请问,为什么在对p重新分配空间后,原来p[0]的内容就消失了?
问题点数:0、回复次数:10Top
1 楼lw1a2(一刀 现在改六点下班了:()回复于 2005-04-02 19:21:02 得分 0
什么编译器?Top
2 楼zjlxysunman(我是小菜)回复于 2005-04-02 19:21:22 得分 0
p = (int *)realloc(p , sizeof(int) * 2);Top
3 楼chunhai12(小海)回复于 2005-04-02 19:29:49 得分 0
void main()
{
int *p;
p = new int[1];
p[0] = 1;
p = (int*)realloc(p, sizeof(int)*2);
p[1] = 2;
delete[] p;
}Top
4 楼kobefly(科比--网络学习中)回复于 2005-04-02 20:31:56 得分 0
你第二次分配的时候,比第一次还少!
第2个参数,应该是字节数,也就是2×sizeof(int) == 8Top
5 楼blow_jj(阿俊)回复于 2005-04-02 20:58:35 得分 0
同意chunhai12(苦行僧)的代码Top
6 楼arrowcy(长弓手)回复于 2005-04-02 23:49:53 得分 0
p=(int*)realloc(p,2);
int是4个字节的,新分配的只有两个字节,当然出问题了Top
7 楼arrowcy(长弓手)回复于 2005-04-02 23:51:57 得分 0
实际上这是你的操作p[1]=2都是错误的
在使用内存分配函数时,最好使用 sizeof(类型)*个数 来指定内存大小,这一方面可以避免上面你犯的那种错误,另一方面还可以增强程序的可移植性Top
8 楼Novice_wen(新手)回复于 2005-04-03 00:52:02 得分 0
哦,原来是这样啊。Top
9 楼Novice_wen(新手)回复于 2005-04-03 00:54:33 得分 0
为什么说p[1]=2这样操作是错的?Top
10 楼MagicCarmack(MagiC++)回复于 2005-04-03 01:00:43 得分 0
p=(int*)realloc(p,2);
int是4个字节的,新分配的只有两个字节,当然出问题了
Top




