我无法使用malloc()和realloc()函数分配内存

时间:2019-01-06 09:46:16

标签: c

我正在尝试添加一个数组的总和。我首先使用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);    
        }    
    }    
}    

1 个答案:

答案 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
    }