0

我在 C++ 编程方面非常缺乏经验,现在我正在尝试使用 dctmk 制作一个小程序来修改 dicom 图像的像素数据。在阅读文档时这样做,我发现了一个我不太清楚的 c++ 方法。在DicomImage类的文档中,我找到了以下方法:

int DicomImage::getOutputData   (   void *      buffer,
        const unsigned long     size,
        const int   bits = 0,
        const unsigned long     frame = 0,
        const int   planar = 0   
    )

我的困惑是关于buffer。它在链接中引用为

buffer :指向内存缓冲区的指针(必须已经分配)

在这里我的困惑是我如何分配?我不确定如何分配一个 void 类型指针的内存。你能解释一下吗?谢谢你。

4

4 回答 4

5

您可以通过以下方式进行操作(例如):

void * mem = malloc(1024); // 1 kb

image.GetOutputData(mem, 1024);

// Don't forget to free(mem);

另一种方式:

char * mem = new char[1024];

image.GetOutputData((void *)mem, 1024);

// Don't forget to delete[] mem;

另一种方式:

char mem[1024];

image.GetOutputData((void *)&mem, 1024);
于 2013-05-16T09:34:19.667 回答
4

指向void可以指向任何东西的指针,它是指向某些内存的通用非描述匿名指针。这意味着您可以将任何类型的指针作为函数的第一个参数传递,因为所有指针都可以隐式转换为void*.

于 2013-05-16T09:31:06.740 回答
0

您可以分配任何类型的缓冲区。它将使用 void* 进行转换。但是,您将需要传递适当大小的元素。您需要参考 api 文档了解每个缓冲区元素的大小。在下面的示例中,它是 1 个字节。总缓冲区大小为 10。

int size_of_buffer = 10;
unsigned char *buffer = malloc(sizeof(unsigned char)*size_of_buffer);
于 2013-05-16T09:33:24.390 回答
0

看起来DicomImage::getOutputData并不关心您如何分配字节。只需将指针指向您选择的某个 blob(对象、结构、数组等)并将其转换为void*. 您可以使用 获取内存newmalloc也可以是局部变量。

要确定的事情:

  • 确保分配足够的空间。
  • 确保您准确发送size参数。
  • 确保您了解DicomImage::getOutputData使用哪种数据格式。
于 2013-05-16T09:33:28.783 回答