Sekarang sebelum orang mulai menandai ini sebagai dup, saya telah membaca semua yang berikut, tidak ada yang memberikan jawaban yang saya cari:
- C FAQ: Apa yang salah dengan nilai pengembalian malloc?
- SO: Haruskah saya secara eksplisit menggunakan nilai kembalian malloc ()?
- SO: Pointer-cast yang tidak perlu di C
- SO: Apakah saya memberikan hasil malloc?
C FAQ dan banyak jawaban atas pertanyaan di atas mengutip kesalahan misterius yang mallocdapat disembunyikan oleh nilai pengembalian casting ; namun, tidak satupun dari mereka memberikan contoh spesifik dari kesalahan seperti itu dalam praktiknya. Sekarang perhatikan bahwa saya mengatakan kesalahan , bukan peringatan .
Sekarang diberi kode berikut:
#include <string.h>
#include <stdio.h>
// #include <stdlib.h>
int main(int argc, char** argv) {
char * p = /*(char*)*/malloc(10);
strcpy(p, "hello");
printf("%s\n", p);
return 0;
}
Mengompilasi kode di atas dengan gcc 4.2, dengan dan tanpa cast memberikan peringatan yang sama, dan program dijalankan dengan benar dan memberikan hasil yang sama pada kedua kasus.
anon@anon:~/$ gcc -Wextra nostdlib_malloc.c -o nostdlib_malloc
nostdlib_malloc.c: In function ‘main’:
nostdlib_malloc.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’
anon@anon:~/$ ./nostdlib_malloc
hello
Jadi adakah yang bisa memberikan contoh kode spesifik dari kompilasi atau runtime error yang dapat terjadi karena mallocnilai kembalian casting , atau apakah ini hanya legenda urban?
Sunting Saya menemukan dua argumen yang ditulis dengan baik mengenai masalah ini:
- Mendukung Casting: CERT Advisory: Segera mentransmisikan hasil panggilan fungsi alokasi memori ke pointer ke tipe yang dialokasikan
- Against Casting (kesalahan 404 per 2012-02-14: gunakan salinan Internet Archive Wayback Machine dari 2010-01-27. {2016-03-18: "Halaman tidak dapat dirayapi atau ditampilkan karena robots.txt."})
voidpointer memungkinkan untuk mengkompilasi kode sebagai C ++; beberapa orang mengatakan itu fitur, menurut saya ini bug;)