Страницы

Поиск по вопросам

среда, 24 апреля 2019 г.

в массиве содержатся разные элементы

Вот код:
int *p;
// так как в функцию указатель в таком виде передать нельзя: компилятор заругается, то:
p = (int*)malloc(sizeof(int)); // в функции я переопределю его размер через realloc
func(p);
for (i = 0; i < count; i++) printf("%d ", p[i]); // возвращает мусор /* если из функции делать вывод, то в консоль выводятся корректные значения */
Помогите понять, в чём тут дело ?
Прототип функции func
void func(int *arr);
Делать int * не хочу пока что: хочу понять, что тут не так...


Ответ

Итак, у вас есть указатель int* p; и вы хотите инициализировать его через вызов функции. Можно сделать так:
void func(int** inPtr){ int* tmp = (int*)malloc(0x100); *inPtr = tmp; //(*inPtr)[2] = 0x02;//пишем 3-й элемент }
void main(void){ int* p; func(&p); //printf("0x%X
", p[2]);//читаем 3-й элемент }
func принимает указатель на указатель на int, то есть адрес указателя на int. В main мы через ссылку получили адрес нашего указателя и передали его в функцию. В функции мы через разыменование из адреса получили сам указатель и записали в него выделенный буфер.
Пляски с tmp нужны, чтобы в отладчике можно было посмотреть реальный адрес выделенного буфера и сравнить его с тем, что будет в p после выполнения funс()

Комментариев нет:

Отправить комментарий