【问题标题】:How to obtain data from a memory address pointed by another pointer?如何从另一个指针指向的内存地址获取数据?
【发布时间】:2018-10-03 08:41:35
【问题描述】:

我正在使用 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: '=' : cannot convert from char to char *.

如何获取存储在该内存地址中的数据?

【问题讨论】:

  • 您的代码中没有指向指针的指针(也不需要一个)。
  • 这里不需要new,只需声明char image_data[1024](或std::array&lt;char, 1024&gt; image_data并传递image_data.data()

标签: c++ pointers memory-address pointer-to-pointer


【解决方案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);

这会将image_data指向的1024个字符(被DSGetBufferInfo修改后)复制到p_image_data指向的1024个字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2011-08-23
    相关资源
    最近更新 更多