Как получить данные из адреса памяти, указанного другим указателем? - PullRequest
0 голосов
/ 03 октября 2018

Я работаю с библиотекой GenICam, один из методов описан следующим образом: enter image description here

Я использую этот метод для получения кадров камеры.Мы должны предоставить 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: '=': невозможно преобразовать символ в символ *.

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

1 Ответ

0 голосов
/ 03 октября 2018
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.

...