2014-10-14 6 views
0

Я уверен, что ответ на этот вопрос я не понимаю, правильно ли указатели и ссылки!Развернуть массив с realloc внутри функции - Указатели?

Так в начале моего файла C Я определения структуры для людей:

typedef struct { 
    char id[4]; 
    int age; 
    char name[128]; 
} people; 

Тогда внутри основной() создать массив из 10 людей Структуры под названием запись.

people* record = (people*)malloc(sizeof(people)* 10); 

В основной() мы начинаем, а затем нырять в функцию с

MyFunction(record); 

(Прототип этой функции в начале файла C до основной() с

int MyFunction(people *record); 

Внутри MyFunction() мы делаем различные вещи, в том числе желаем увеличить размер , чтобы он мог содержать больше люди structs. Я пытаюсь увеличить записи размера массива с

struct people *tmp = realloc(record, 20 * sizeof (people)); 
if (tmp) 
{ 
    record = tmp; 
} 

Но это не работает, и я получаю повреждение памяти при попытке использовать вновь добавленные в структуры массива.

Как я уже сказал, я уверен, что это связано с тем, что я не слишком занижаю Указатели и ссылки. Обратите внимание, что MyFunction() не может предоставить массив записи в качестве возвращаемого типа, потому что я уже использую его возвращаемый int для чего-то другого (и я не уверен, что я получу это для правильной работы либо !) - Мне нужно, чтобы он использовал основной массив .

Может ли кто-нибудь указать мне в правильном направлении, пожалуйста?

+1

Вы передаете адрес записи не по адресу указателя. Вызывающая функция по-прежнему имеет старый адрес записи, назначенной старому указателю, хотя вызываемая функция уже перенесла запись на вновь выделенный диапазон адресов. – alvits

ответ

1
int MyFunction(people **record);// MyFunction(&record);//call at main 
... 

struct people *tmp = realloc(*record, 20 * sizeof (people)); 
if (tmp) 
{ 
    *record = tmp; 
} 
Смежные вопросы