Как получить данные из адреса памяти, на который указывает другой указатель?

Я работаю с библиотекой GenICam, один из способов описан так: введите здесь описание изображения

Я использую этот метод для получения кадров камеры. Мы должны предоставить pBuffer указатель, метод вернется к нашему указателю, адресу памяти, где хранятся данные.

Итак, я хочу получить данные, хранящиеся в этом адресе памяти, но делаю это следующим образом:

char* image_data = nullptr; 
image_data = new char[1024];
status = gentl->DSGetBufferInfo(datastream_module_handle, new_buffer_event_data.BufferHandle, GenTL::BUFFER_INFO_BASE, &info_datatype, image_data, &info_datasize);
std::cout << **image_data << std::endl;

Я получаю эту ошибку: ошибка c2100 недопустимая косвенность С++.

Я попытался использовать вспомогательный указатель:

char* image_data = nullptr;
image_data = new char[1024];
char* p_image_data = nullptr;
p_image_data = new char[1024];
status = gentl ... (same method)
p_image_data = *image_data;
std::cout << *p_image_data << std::endl;

но я получил следующую ошибку: ошибка C2440: '=': невозможно преобразовать из char в char *.

Как я могу получить данные, хранящиеся в этом адресе памяти?


person Alejandro    schedule 03.10.2018    source источник
comment
В вашем коде нет указателя на указатель (и в нем нет необходимости).   -  person Yksisarvinen    schedule 03.10.2018
comment
Вам не нужно new здесь, вы можете просто объявить char image_data[1024] (или std::array<char, 1024> image_data и передать image_data.data())   -  person Caleth    schedule 03.10.2018


Ответы (1)


p_image_data = *image_data;

Должно быть

p_image_data = image_data;

Они оба имеют один и тот же тип (char*), поэтому нет необходимости в разыменовании. Разыменовывая image_data, вы снова получаете char, и это нельзя присвоить p_image_data (то есть char*), отсюда и ошибка.

Конечно, теперь вы не копируете данные, а просто устанавливаете указатель. Вместо этого вы, вероятно, хотите:

memcpy(p_image_data, image_data, 1024);

Это копирует 1024 символа, на которые указывает image_data (после изменения DSGetBufferInfo), в 1024 байта, на которые указывает p_image_data.

person Blaze    schedule 03.10.2018