你好,我使用的是 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 中也是如此。这使得代码更安全和清晰。