C语言中的内存分配,使用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:"

我如何在这里为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:");
    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);