如何释放uint32_t指针?

时间:2018-09-18 10:35:06

标签: c windows visual-studio compilation

我是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ạmAnhTuấ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

1 个答案:

答案 0 :(得分:0)

由于<context:property-placeholder location="file:///C:/dev/workspace/application/config/${spring.profiles.active}/application-${spring.profiles.active}.properties" /> 计算机上的指针大小为64bit,因此您的程序无法在64bit计算机上运行。

您可以使用8bytes代替uintptr_t来保存地址。 释放时,将uint32_t强制转换为uintptr_t,如下面的示例代码所示。

void*
相关问题