Как получить данные из адреса памяти, на который указывает другой указатель?
Я работаю с библиотекой 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
,