Kyuu
Kyuu

Reputation: 1045

malloc and realloc array giving unexpected output

When input is '1 2 3 4 5 6 7 8 9 10 11' Expected output should be the same as input. Yet the output is '1 2 3 4 5 6 7 8 9 10 -1850774484' . Only happens when there are more than 10 integers being inputted. Where did I go wrong with my realloc line

#include <stdio.h>
#include <stdlib.h>

#define INITIAL_SIZE 10

int
main(int argc, char **argv){
    int i = 0, num, size = 0, n = INITIAL_SIZE;
    int *A;

    A = malloc(n * sizeof(int));

    if(A == NULL){
        printf("OUT OF MEMORY\n");
        exit(EXIT_FAILURE);
    }

    while(scanf("%d",&num) == 1 && getchar()!='\n'){
        A[i] = num;
        i++;
        size++;
        if (size >= n){
            n = n * 2;
            A = realloc(A,n * sizeof(int));
        }
    }

    printf("Int Array: ");
    for (i = 0; i <= size; i++){
        printf("%d ", A[i]);
    }
    printf("\n");

    return 0;
}

Upvotes: 0

Views: 78

Answers (1)

Spikatrix
Spikatrix

Reputation: 20244

There is nothing wrong with the realloc. You are printing an extra uninitialized index in the last loop. Fix it by changing

for (i = 0; i <= size; i++)

to

for (i = 0; i < size; i++)

The only problem with the realloc is that you don't check if it was successful just like you did for the malloc. Another problem is that you don't free the allocated memory.

Upvotes: 5

Related Questions