您好我使用的是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;
}
我有这些错误:
error C2440: 'initializing' : cannot convert from 'void *' to 'MEMBLOCK *' error C2440: '=' : cannot convert from 'PVOID' to 'unsigned char *' error C2440: '=' : cannot convert from 'void *' to 'unsigned char *'
我有点新手。你能否提供一个转换后的代码,它实际上适用于c ++。
谢谢
答案 0 :(得分:3)
在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中使用显式转换。这使得代码更加安全和清晰。
答案 1 :(得分:3)
由于您使用C ++编程,因此不应使用旧的C函数malloc
。相反,我建议您使用C ++ new
构造:
MEMBLOCK *mb = new MEMBLOCK;
答案 2 :(得分:2)
malloc()
返回void*
,C ++不会自动将void*
转换为不同的指针类型。所以你必须转换返回值:
MEMBLOCK *mb = (MEMBLOCK*) malloc(sizeof(MEMBLOCK));
尝试:
MEMBLOCK* create_memblock (HANDLE hProc, MEMORY_BASIC_INFORMATION *meminfo)
{
MEMBLOCK *mb = (MEMBLOCK*)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;
}