Я новичок с указателем в c.Я просто тестирую код, подобный этому
void test(uint32_t *data)
{
unsigned char raw_data[] = "this is a test data";
unsigned char *raw = (unsigned char*)malloc(strlen((char*)raw_data));
memcpy(raw, raw_data, strlen((char*)raw_data)+1);
*data = (uint32_t)raw;
}
int _tmain(int argc, _TCHAR* argv[])
{
uint32_t data;
test(&data);
printf("%s\n", data);
if (data != NULL)
{
free(data);
}
return 0;
}
Я использую uint32_t
для хранения unsigned char*
, когда я пытаюсь освободить data
, я встречаю ошибку error C2664: “void free(void *)”: uint32_t can not convert to “void *"
.
Как я могу освободить data
?
Во-первых, благодаря Phạm Anh Tuấn, Gerhardh, KBlr и сыну.Вы очень добры.
Решение:
void test(uintptr_t *data)
{
unsigned char raw_data[] = "this is a test data";
unsigned char *raw = (unsigned char*)malloc(strlen((char*)raw_data) + 1);
memcpy(raw, raw_data, strlen((char*)raw_data));
raw[strlen((char *)raw_data)] = '\0';
*data = (uintptr_t)raw;
}
int _tmain(int argc, _TCHAR* argv[])
{
uintptr_t data;
test(&data);
printf("%s\n", data);
if (data != NULL)
{
free((void *)data);
}
getchar();
return 0;
}
Необходимо добавить '\0'
к raw
в качестве завершающей строки, тогда free
работает.А для работы на 64bit
измените uint32_t
на intptr_t
.