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

Я работаю с библиотекой 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 незаконное косвенное обращение C++.

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

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 *.

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

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,

Другие вопросы по тегам