你好,我使用的是 Visual Studio c++ 2010

我对这段代码有问题(它取自 C 语言代码):

MEMBLOCK* create_memblock (HANDLE hProc,  MEMORY_BASIC_INFORMATION *meminfo)
{

    MEMBLOCK *mb = malloc(sizeof(MEMBLOCK));

    if (mb)
    {
        mb->hProc = hProc;
        mb->addr = meminfo->BaseAddress;
        mb->size = meminfo->RegionSize;
        mb->buffer = malloc(meminfo->RegionSize);
        mb->next = NULL;

    }
    return mb;
}

我有这些错误:

错误 C2440:“正在初始化”:无法从“void *”转换为“MEMBLOCK *”
错误 C2440:“=”:无法从“PVOID”转换为“无符号字符 *”
错误 C2440:“=”:无法从“void *”转换为“unsigned char *”

我有点新手。您能否为此提供一个实际适用于 C++ 的转换代码。

谢谢

最佳答案

在 C++ 中,您不能将 void * 类型的指针分配给其他类型的指针。所以例如而不是写作

MEMBLOCK *mb = malloc(sizeof(MEMBLOCK));

你必须写
MEMBLOCK *mb = ( MEMBLOCK * )malloc(sizeof(MEMBLOCK));

此外,您必须更改存在相同问题的其他语句。这些说法似乎是
mb->addr = ( unsigned char * )meminfo->BaseAddress;
mb->buffer = ( unsigned char * )malloc(meminfo->RegionSize);

这是一个很好的例子,你 总是 应该使用显式转换,即使在 C 中也是如此。这使得代码更安全和清晰。

10-08 14:35