C语言中的内存分配,使用Realloc
我如何在这里为calloc使用realloc函数。请导游?? calloc函数的第一个输入为我提供了正确的输出,但在使用realloc函数后,我的编译器卡住了,我在这里犯了什么错误? 输出如下所示:C语言中的内存分配,使用Realloc,c,dynamic-memory-allocation,realloc,C,Dynamic Memory Allocation,Realloc,我如何在这里为calloc使用realloc函数。请导游?? calloc函数的第一个输入为我提供了正确的输出,但在使用realloc函数后,我的编译器卡住了,我在这里犯了什么错误? 输出如下所示: #include<stdio.h> #include<stdlib.h> int main() { int n,n2,sum=0,i; int *ptr,*p; printf("Enter Totoal Number of elements:"
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,n2,sum=0,i;
int *ptr,*p;
printf("Enter Totoal Number of elements:");
scanf("%d",&n);
ptr=(int*)calloc(n,sizeof(int));
for(i=0;i<n;i++)
{
printf("Enter %d Element:",i+1);
scanf("%d",ptr+i);
sum=sum+*(ptr+i);
}
printf("The sum is: %d\n",sum);
printf("Enter new size:");
scanf("%d",&n2);
p=(int *)realloc(ptr,n2*sizeof(int));
for(i=0;i<n2;i++)
sum=sum+*(p+i);
printf("The new sum is:%d",sum);
free(ptr);
free(p);
}
#包括
#包括
int main()
{
int n,n2,和=0,i;
int*ptr,*p;
printf(“输入元素总数:”);
scanf(“%d”和“&n”);
ptr=(int*)calloc(n,sizeof(int));
对于(i=0;i更新后编辑):您正在双重释放同一指针
free(ptr);
free(p);
根据manrealloc
:realloc返回作为参数传递的指针,因此ptr
和p
是相同的。实际上这里不需要两个指针
如果您想初始化,请改为通过ptr
或p
,我猜您会尝试这样做:
for(i=0;i<10*sizeof(int);i++)
对于(i=0;i您不需要将sum
重置为零
printf("Enter new size:");
scanf("%d",&n2);
p=(int *)realloc(ptr,n2*sizeof(int));
for(i=0;i<n2;i++)
sum=sum+*(p+i);
printf("The new sum is:%d",sum);
在调用realloc
后,不允许使用ptr
。如果需要移动内存位置,则该内存可能已在realloc
中释放。然后,该内存不再属于您。
或者它可能与p
相同,然后您将尝试两次释放samem内存。
这两个都不是好主意。sum=sum+*(p+i);
您没有初始化p
以指向某个地方。未定义的行为。此外,对于(i=0;我不知道你为什么要硬编码大小为10
的realloc
这样做。如果你原来calloc
分配的内存小于这个值,那么剩下的内存将被垃圾填满,当你在两行之后访问它时,这是未定义的行为。请再次检查问题我已经更新了程序可能会崩溃,因为您调用了两次free
,但只调用了一次malloc。p
和ptr
指向同一内存。请编辑我的代码,然后稍加更正:ptr
和p
中的p=(int*)realloc(ptr,n2*sizeof(int))
不一定相同,根据:
free(ptr);
free(p);