Articles of gestion de la mémoire

Comment libérer la mémoire qui a été utilisée pour une variable en C?

Comment libérer la mémoire que j’ai utilisée pour une variable (par exemple une longue chaîne) en C?

Devrais-je libérer char * initialisé à l’aide de chaînes de caractères?

Devrais-je libérer les variables char* lorsqu’elles ont été initialisées à l’aide de chaînes de caractères? Pour moi, la syntaxe me conduirait à l’hypothèse qu’elles ne sont allouées que par stack, mais cet exemple m’a montré, elles ne le sont pas. #include #include static char* globalBuffer; typedef struct Container { char* buffer; } Container; Container* Container_new(char* […]

Est-ce une bonne pratique de libérer de la mémoire via un pointeur à const

De nombreuses questions traitent des détails de C et C ++ traitant de la suppression de pointeur à const, à savoir que free() ne les accepte pas et que delete et delete[] do et que constness n’empêche pas la destruction d’object. Ce qui m’intéresse, c’est de savoir si vous pensez que c’est une bonne pratique […]

Quelles sont les chances que realloc échoue?

Est-ce que cela échoue quand il manque de mémoire libre semblable à malloc ou pourrait-il y avoir d’autres raisons?

Où est la mémoire allouée pour les pointeurs et leurs données?

Ma question est si j’ai une fonction void func1(){ char * s = “hello”; char * c; int b; c = (char *) malloc(15); strcpy(c,s); } Je pense que le pointeur s est alloué sur la stack, mais où sont stockées les données “hello” dans le segment de données du programme? Quant à c et […]

Comment lister les objects de code alliés à l’éditeur de liens w / gcc?

Je construis une application intégrée comprenant plusieurs modules de code et une bibliothèque statique. Certaines variables globales sont explicitement placées dans des sections de mémoire dédiées (c’est-à-dire pas la section .data par défaut). L’architecture de la mémoire du processeur est de 4 banques, créant un espace mémoire physique contigu. Dans mon application, seule la 1ère […]

Inconvénients des pointeurs sur les variables statiques

J’utilise souvent des fonctions pratiques qui renvoient des pointeurs à des tampons statiques comme ceci: char* p(int x) { static char res[512]; snprintf(res, sizeof(res)-1, “number is %d”, x)); return res; } et les utiliser partout comme arguments pour d’autres fonctions: … some_func( somearg, p(6) ); …. Cependant, cette “commodité” a un inconvénient gênant en plus […]

tableau 2d gratuit en c

Je résolvais des exercices de pointeur simples lorsque je suis tombé sur l’exemple suivant: void deallocate2D(int** array, int nrows) { /* deallocate each row */ int i; for(i = 0; i < nrows; i++) { free(array[i]); } /* deallocate array of pointers */ free(array); } Le tableau est défini dans main comme int ** tableau1; […]

Quand une fonction C doit-elle retourner la mémoire récemment allouée?

Dans une réponse ailleurs, j’ai trouvé l’extrait suivant: En général, il est plus agréable en C d’atsortingbuer de la mémoire à l’appelant, pas à l’appelé – c’est pourquoi strcpy est une fonction «plus agréable», à mon avis, que strdup. Je peux voir en quoi ce modèle est valide, mais pourquoi pourrait-il être considéré comme plus […]

Est-il nuisible d’appeler “gratuitement” deux fois le même pointeur dans un programme C?

Si j’ai un programme ca, comme: SomeTypePtr my_type; my_type = malloc(sizeof(someType)); /* do stuff */ free(my_type); /* do a bunch of more stuff */ free(my_type); L’appel de “libre” pour my_type fait-il du mal? Après avoir appelé free (my_type), le pointeur redevient-il un pointeur nul?