перераспределить недопустимый старый размер

Отказ от ответственности :Это домашнее задание. Я пытаюсь это сделать и не ожидаю и не хочу, чтобы кто-то сделал это за меня. Буду признателен за несколько указаний (хе-хе ), где я ошибаюсь.

Домашнее задание требует, чтобы я создал массив int*, содержащий 10 элементов, а затем попытался вставить в него миллион целых чисел. Каждая вставка проверяет, нужно ли изменить размер массива, и если да, я увеличиваю его размер, чтобы он мог содержать еще один элемент.

Когда я вставляю 10 000 элементов, все работает нормально, но если я попробую 100 000 элементов, я получаю следующую ошибку:

*** glibc detected ***./set2: realloc(): invalid old size: 0x00000000024dc010 ***

Это код, который я запускаю. Я прокомментировал это, так что это легко читается.

void main()
{
    //begin with a size of 10
    int currentsize = 10;
    int* arr = malloc(currentsize * sizeof(int));       
    int i;

    //initalize with all elements set to INT_MAX
    for(i = 0; i < currentsize; i++) {
        arr[i] = INT_MAX;
    }


    // insert random elements
    for(i = 0; i < 100000; i++) {
        currentsize = add(rand() % 100,arr,currentsize);
    }

    free(arr);
}

/*
    Method resizes array if needed, and returns the new size of the array
    Also inserts the element into the array
*/
int add(int x, int* arr, int size)
{
    //find the first available location 
    int newSize = size;
    int i;
    for(i = 0; i < size; i++) {
        if (arr[i] == INT_MAX)
            break;
    }

    if (i >= size) {
        //need to realloc
        newSize++;
        arr = realloc(arr, newSize * sizeof(int) );     
    }

    arr[i] = x;

    return newSize;
}
5
задан xbonez 5 January 2015 в 19:13
поделиться