我正在尝试添加一个数组的总和。我首先使用malloc函数分配内存,然后使用realloc函数重新分配内存。但是realloc函数不会分配任何内存。
这是我的密码
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main(){
int s,*ptr, *p,sum=0,i,*q;
printf("\nEnter the size of array: ");
scanf("%d",&s);
ptr=(int *)malloc(s*sizeof(int));
p=ptr;
printf("\nMemory allocated: %u",ptr);
if(ptr==NULL){
printf("\nERROR! Insuffcient memory.");
exit(EXIT_FAILURE);
}
else{
printf("\nEnter the elements of array: ");
for(i=1;i<=s;i++){
scanf("%d",ptr);
sum+=*ptr;
ptr++;
}
printf("\nThe elements of arrays are: ");
for(i=1;i<=s;i++){
printf("%d\t",*p);
p++;
}
printf("\nThe Sum of array elements is: %d",sum);
printf("\nEnter the new Size of array: ");
scanf("%d",&s);
ptr=(int *)realloc(ptr , s * sizeof(int));
if(ptr==NULL){
printf("\nERROR!! Insufficient Memory!!");
exit(EXIT_FAILURE);
}
else{
printf("\nReallocated memory: %u",ptr);
q=ptr;
printf("\nEnter the elements of array: ");
for(i=1;i<=s;i++){
scanf("%d",ptr);
sum+=*ptr;
ptr++;
}
printf("\nThe elements of arrays are: ");
for(i=1;i<=s;i++){
printf("%d\t",*q);
q++;
}
printf("\nThe Sum of array elements is: %d",sum);
}
}
}
答案 0 :(得分:3)
这是因为您更改了ptr
的值,使其不再指向原始的已分配内存。它发生在这里:
for(i=1;i<=s;i++){
scanf("%d",ptr);
sum+=*ptr;
ptr++; // ptr is changed
}
您应该执行以下操作,而不是更改ptr
:
for(i=0;i<s;i++){
scanf("%d",&ptr[i]); // or scanf("%d", ptr + i);
sum+=ptr[i];
}
BTW:使用scanf
时,请始终检查其是否扫描了预期的元素数量。喜欢:
if (scanf("%d",&ptr[i]) != 1)
{
// add error handling here
}