динамическая структура, дающая ошибку - PullRequest
0 голосов
/ 27 декабря 2010
int i=0;
void push(int *ptr)
{
    if(i==0)
    {
        ptr= (int *)calloc(1,sizeof(int));
    }
    else
    {
        ptr=(int *)realloc(ptr,sizeof(int)*(i+1));
    }
    i++;
}

когда я добавляю два или более числа, realloc выдает ошибку (main.exe)

Ответы [ 2 ]

3 голосов
/ 27 декабря 2010

Я предполагаю, что у вас есть указатель где-то еще, который вы отправляете в качестве аргумента функции "push"?

Вам необходимо отправить указатель на этот указатель, чтобы функция «push» могла изменить его значение.

0 голосов
/ 27 декабря 2010

Главное, что вам, вероятно, нужно, это объявить параметр push как int **ptr, присвоить *ptr и вызвать его с помощью &ptr.

Вы также не нуждаетесь в кастах и ​​некоторых других вещах, я мог бы предложить:

int i=0;

void push(int **ptr)
{
    *ptr = i++ == 0 ? calloc(1,sizeof(int)) : realloc(ptr,sizeof(int)*(i+1));
}
...