Envoyé par
troumad
Je regarde la doc. Es-tu sûr de ce que tu dis ? Tu ne parlerais pas plutôt g_try_malloc (ou g_try_realloc)
Certain. C'est dans la doc de
g_try_malloc. C'est d'ailleurs l'origine de la différence de sémantique: g_try_malloc dit "
essaie de m'allouer de la mémoire" (et n'échoue pas si tu n'y arrives pas), là où g_malloc dit "alloue moi de la mémoire" (et tue le programme si tu n'y arrives pas). Le comportement de malloc est (cf
man 3 malloc):
The malloc() and calloc() functions return a pointer to the allocated memory that is suitably aligned for any kind of variable.
On error, these functions return NULL. NULL may also be returned by a successful call to malloc() with a size of zero, or by a successful call to calloc() with nmemb or size equal to zero.
Donc en cas d'échec, malloc renvoie NULL. g_malloc, lui, tue le programme, faisant en sorte de découvrir le problème dès qu'il survient, à l'allocation du buffer, plutôt que peut être beaucoup plus tard, quand tu compterais l'utiliser, et où tu aurais un crash vu que tu tenterais d'écrire à l'adresse NULL.
g_try_malloc quant à lui sert à essayer d'allouer de gros buffers, si on n'est pas sûr d'avoir la mémoire suffisante pour cela.
1 |
0 |