Mon commentaire général, et une règle générale pour travailler en C ... Si vous devez faire des jets de pointeurs, demandez-vous: est-ce vraiment nécessaire? Les moments où vous devrez honnêtement faire des jets de pointeurs sont extrêmement rares. Ce qui est beaucoup plus courant, c'est quand les gens utilisent des jets de pointeurs parce qu'ils ont des lacunes dans la compréhension, ne comprennent pas très clairement ce qu'ils essaient de faire ou devraient faire, et essaient de faire taire un avertissement du compilateur.
ptr = (UINT32)malloc(1000);
Très mauvais! Si vous faites quelque chose avec ce "pointeur", vous serez très chanceux si cela fonctionne sur des plaforms 64 bits. Laissez les pointeurs comme types de pointeurs.Si vous devez absolument les stocker dans un nombre entier, utilisez uintptr_t
qui est garanti être assez grand.
Je dirais que vous pourriez avoir essayé de le faire:
// Allocate 1,000 32-bit integers
UINT32 *ptr = (UINT32*)malloc(1000 * sizeof(UINT32));
Cependant, même c'est la mauvaise forme de code C, un bizarre C et C++ hybride. Contrairement à C++, en C, vous pouvez simplement prendre un void *
et apporter implicitement à tout type de pointeur:
// Allocate 1,000 32-bit integers
UINT32 *ptr = malloc(1000 * sizeof(UINT32));
Enfin,
free((void*)ptr);
casting à void*
est un autre grand drapeau rouge, souvent un signe que la l'auteur ne sait pas ce qu'ils font. Une fois que vous changez ptr
être un type de pointeur réelle, faites ceci:
free(ptr);
'FINI #define() goto fini,' oh Seigneur, aie pitié – orlp
S'il vous plaît ne pas utiliser 'goto'. Merci de ne pas cacher 'goto' dans une macro. –
Est-ce que ce code compile? Je crois que non. –