int n;
int **arr;
arr = (int**)malloc(n*sizeof(int));
for (i=0; i<n; ++i){
arr[i] = malloc(2*sizeof(int));
}
[EDIT]comment libérer la mémoire allouée au malloc dans le code suivant?
*** glibc detected *** ./abc: double free or corruption (out): 0x0000000002693370
======= Backtrace: =========
/lib/libc.so.6(+0x775b6)[0x7f42719465b6]
/lib/libc.so.6(cfree+0x73)[0x7f427194ce53]
./abc[0x405f01]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7f42718edc4d]
./abc[0x400ee9]
======= Memory map: ========
00400000-00416000 r-xp 00000000 08:07 392882
00616000-00617000 r--p 00016000 08:07 392882
J'ai essayé avec les réponses indiqués ci-dessus, mais je m'y suis comme suit error.What mentionnée ci-dessus peut être la raison?
[EDIT]
Le problème mentionné ci-dessus est maintenant résolu. Comme il y avait un bug dans le code. Maintenant, ce que je ne reçois pas est une amélioration de la mémoire libérée. Quelle peut être la raison de cela?
[EDIT] J'utilise des modules pour imprimer le memory.following est le code
memory_Print();
#ifdef CHECK
memory_PrintLeaks();
#endif
Ici memory_PrintLeaks()
imprime la mémoire demandée et libéré memory.I reçois la même valeur après les modifications. Une remarque supplémentaire ce que je voudrais ajouter est, puis-je appeler le free() n'importe où à partir du programme ou il est nécessaire d'appeler à partir de certains endroits particuliers comme l'endroit où le malloc() a été appelé ou au fin du programme?
Vous avez un bug. Le premier 'malloc' alloue de l'espace pour' pointers', pas 'ints'. L'appel de la fonction devrait être 'malloc (n * sizeof (int *))' – Blastfurnace
oui cela a fonctionné maintenant. Mais pourquoi la fuite de mémoire est la même pour moi après avoir fait cela aussi? Je ne reçois aucune amélioration dans la mémoire libérée. – thetna
Modifiez votre code pour montrer comment vous «libérez» la mémoire. – Blastfurnace