Мой общий комментарий и общее практическое правило для работы в C ... Если вам нужно выполнить приведение указателей, спросите себя: действительно ли вы должны это делать?Времена, когда вам действительно нужно делать приведения указателей, чрезвычайно редки.Гораздо чаще встречаются случаи, когда люди используют приведение указателей, потому что у них есть некоторый пробел в понимании, они не очень четко понимают, что они пытаются или должны делать, и пытаются заставить замолчать предупреждение компилятора.
ptr = (UINT32)malloc(1000);
Очень плохо!Если вы сделаете что-нибудь с этим «указателем», вам очень повезет, если он работает на 64-битных платформах.Оставьте указатели как типы указателей.Если вам абсолютно необходимо хранить их в целом числе, используйте uintptr_t
, который гарантированно будет достаточно большим.
Я бы сказал, что вы, возможно, пытались сделать:
// Allocate 1,000 32-bit integers
UINT32 *ptr = (UINT32*)malloc(1000 * sizeof(UINT32));
Однакодаже это плохая форма для кода C, странный гибрид C и C ++.В отличие от C ++, в C вы можете просто взять void *
и неявно привести его к любому типу указателя:
// Allocate 1,000 32-bit integers
UINT32 *ptr = malloc(1000 * sizeof(UINT32));
Наконец,
free((void*)ptr);
Приведение к void*
- это еще один большойкрасный флаг, часто признак того, что автор не знает, что он делает.Как только вы измените ptr
на фактический тип указателя, просто сделайте это:
free(ptr);