C语言malloc函数的问题 我在下面函数两次用malloc给*p共6个单位内存。结果输出的话只有后面3个可以用为啥

2025-04-03 14:00:50
推荐回答(4个)
回答1:

第一次malloc有一个地址(a),然后p=a,然后赋值了;
第二次malloc也有一个地址(b),p=b,然后赋值;
再printf,这个时候,p=b,那输出的就是b对应空间里的3个值,当然只有后3个了。
如果你想连续上,那第二次不要用malloc,用relloc。

回答2:

你分两次分配内存,前一次3个int,可惜你把它丢失了,第二次分配了三个还用这个指针,你没给新内存头三个int赋值,直接越界写了界外的3个int单元,程序没有立即崩溃已经是很侥幸了

int *p, *p1,i;
p = (int *)malloc(3*sizeof(int));
for(i=0;i<3;i++){
printf("\n int put:");
scanf("%d",p+i);
}
p1 = (int *)malloc(3*sizeof(int));
for(i=0; i<3; i++){
printf("\n int put:");
scanf("%d",p1+i);
}
for(i=0;i<3;i++)printf("%d ",p[i]);
for(i=0;i<3;i++)printf("%d ",p1[i]);

回答3:

给p分两次赋值,p指向的内存空间不存在任何关系。
这样第二次赋值p后,又从第四个地址赋值,前三个地址没有赋值,当然输出很奇怪的结果了。

回答4:

第二次的malloc覆盖了第一次的malloc,开辟的临时空间只有3个 使用的当然只能是3个。