Вот код:
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с()
Комментариев нет:
Отправить комментарий