Malloc

Par exemple, l'appel malloc(4) alloue 4 octets dans le tas mémoire et renvoie l'adresse du premier octet (sur l'image 0x42).

En informatique, dans la bibliothèque standard du langage C, la fonction malloc (pour memory allocation en anglais) permet d'allouer dynamiquement de la mémoire. La libération de la mémoire ainsi réservée s'effectue avec la fonction free.

Cette fonction est déclarée dans l'en-tête <stdlib.h>. Dans les systèmes GNU/Linux, elle fait partie du paquet GNU C Library.

Motivation

Il existe trois types d'allocation de mémoire pour une variable dans un programme C : l'allocation statique, automatique, et dynamique. La fonction malloc concerne l'allocation dynamique.

L'allocation statique a lieu au cours de la compilation par la déclaration de variables statiques. Ces variables là persistent durant toute l'exécution du programme. Cela concerne les variables globales et les variables locales déclarées en utilisant le mot-clé static. L'allocation statique oblige le développeur à connaître à l'avance la quantité de mémoire qui sera utilisée par le programme. C'est ainsi qu'un « gaspillage » de la mémoire peut survenir si l'on réserve trop de mémoire par rapport à ce dont le programme a véritablement besoin pour réaliser la tâche qui lui incombe.

L'allocation automatique a lieu pendant l'exécution du programme sur la pile d'exécution. Il s'agit des variables locales déclarées dans un bloc d'instructions. La libération de la mémoire n'est réalisée qu'à la fin du bloc d'instructions dans lequel est déclarée la variable. Cela peut également être un facteur de gaspillage lorsque de la mémoire est allouée, mais n'est plus utilisée.

C'est ici que l'allocation dynamique de mémoire entre en jeu. La réservation de la mémoire se fait au cours de l'exécution du programme, mais la libération de cette mémoire n'est plus gérée par le compilateur, mais par le programmeur. L'allocation dynamique a lieu à la demande sur le tas. Pour cela, on utilise des fonctions d'allocation de la mémoire comme malloc. Cela augmente la complexité du programme, mais la gestion de la mémoire est plus fine. Si un programme alloue de la mémoire par malloc sans la libérer ensuite par free, on parle de fuite de mémoire. Pour éviter ce type de bug et faciliter l'écriture des programmes, certains langages disposent d'un mécanisme de ramasse-miettes, mais ce n'est pas le cas du langage C.

Utilisation

La fonction malloc permet de réserver une zone de la mémoire. Son prototype est le suivant :

void *malloc(size_t nbOctets);

Le seul paramètre à passer à malloc est le nombre d'octets à allouer. La valeur renvoyée est l'adresse du premier octet de la zone mémoire allouée. Si l'allocation n'a pu se réaliser (par manque de mémoire libre), la valeur de retour est la constante NULL.

La libération de la mémoire précédemment allouée via malloc est assurée par la fonction free dont la déclaration est la suivante :

void free(void *ptr);

Le seul paramètre à passer est l'adresse du premier octet de la zone allouée et aucune valeur n'est retournée une fois cette opération réalisée.

Voici du code réservant 20 octets et le libérant immédiatement après si l'allocation a été effectuée.

#include <stdlib.h>

char * pointeur = malloc(20 * sizeof(char)); //Allocation de 20 octets (Un char est égal à 1 octet)
if(pointeur == NULL)
{
    printf("L'allocation n'a pu être réalisée\n");
}
else
{
    printf("L'allocation a été un succès\n");
    free(pointeur); //Libération des 20 octets précédemment alloués
    pointeur = NULL; // Invalidation du pointeur
}

Fonctions analogues

calloc

La zone mémoire allouée par malloc n'est pas initialisée automatiquement. Cette initialisation peut être réalisée à l'aide de la fonction memset ou bien par le parcours de toute la zone mémoire. Avec la fonction calloc, cette phase d'initialisation n'est plus nécessaire, car la zone mémoire allouée est initialisée avec des 0.

La déclaration de calloc est la suivante :

void *calloc(size_t nmemb, size_t size);

Le paramètre nmemb est le nombre d'éléments que l'on désire réserver et size correspond à la taille en octets d'un élément. La valeur retournée est la même que pour malloc.

realloc

La fonction realloc permet de modifier la taille de la mémoire allouée préalablement avec malloc. S'il est nécessaire de déplacer la zone mémoire, car il n'y a pas assez de mémoire contiguë, la libération de l'ancienne zone mémoire est réalisée par realloc via free.

La déclaration de realloc est la suivante :

void *realloc(void *ptr, size_t size);

Le paramètre ptr désigne le début de la zone mémoire dont on désire modifier la taille. Le second paramètre, size, est la nouvelle taille en octet de la zone mémoire.

Si la fonction réussit, la valeur retournée est le début de la zone mémoire allouée. Attention : la valeur du pointeur ptr n'est plus valide car la nouvelle zone peut débuter à un autre endroit de la mémoire si un déplacement a été nécessaire.

Si la fonction échoue, elle retourne la valeur NULL. Des précautions doivent être prises pour éviter une fuite de mémoire. Il convient de veiller à ce que l'adresse de l'ancien bloc ne soit pas écrasée avant de s'assurer que la réallocation a bien réussi. Dans le code suivant, le test sur la valeur de tampon n'est pas suffisant. Si realloc échoue, l'adresse de la zone mémoire est perdue :

tampon = realloc(tampon, nouvelle_taille);
if (tampon == NULL)
    rapporterErreur();

Pour remédier à ce problème, on introduit une nouvelle variable tmpqui stocke le résultat de realloc sans écraser la valeur de tampon :

tmp = realloc(tampon, nouvelle_taille);
if (tmp == NULL)
  {
    free(tampon);
    rapporterErreur();
  }
else
  tampon = tmp;

Débogage

Débogage sous Windows

Des utilitaires graphiques permettent de vérifier que la mémoire utilisée est bien libérée lorsqu'elle n'est plus utilisée, comme c'est le cas avec MFC Debugging support qui est dédié à l'API MFC de Microsoft[1].

Débogage sous GNU/Linux

  • mtrace, commande servant de débogueur de mémoire et distribuée avec le paquet GNU C Library ; elle permet de tracer les appels à malloc ;
  • TotalView, Valgrind et mpatrol : débogueurs permettant de détecter les fuites de mémoire et les écritures hors de la zone allouée par malloc ;
  • La bibliothèque logicielle DUMA aide à détecter indirectement les malloc ayant une taille trop petite ou trop grande ;

Notes et références

  1. (en) « MFC Debugging Support », Microsoft (consulté le )

Read other articles:

Boeing TB (atau Model 63) adalah pesawat pembom torpedo biplan milik Amerika dirancang oleh Angkatan Laut AS dan dibangun oleh Boeing pada tahun 1927. TB adalah versi perbaikan dari Martin T3M. Ini dibangun dari dural, dengan penutup kain. Roda pendarat adalah konfigurasi konvensional yang bisa dipertukarkan dengan mengapung. Sebagai seorang landplane, unit gigi utama dilakukan roda kembar. Bagian bawah badan pesawat dimasukkan stasiun mengkilap untuk pembom. Tidak ada prototipe TB dibangun. ...

 

  لمعانٍ أخرى، طالع دير كريك (توضيح). دير كريك   الإحداثيات 40°37′45″N 89°19′54″W / 40.6292°N 89.3317°W / 40.6292; -89.3317  [1] تقسيم إداري  البلد الولايات المتحدة[2]  التقسيم الأعلى مقاطعة وودفورد  خصائص جغرافية  المساحة 0.57 ميل مربع  ارتفاع 758 قدم  عدد...

 

Буква со сходным начертанием: Ӕ · ӕ Лигатура латиницы AE Ææ Изображение ◄ Â Ã Ä Å Æ Ç È É Ê ► ◄ â ã ä å æ ç è é ê ► Характеристики Название Æ: latin capital ligature aeæ: latin small ligature ae Юникод Æ: U+00C6æ: U+00E6 HTML-код Æ‎: &#198; или &#xc6;æ‎:...

2013 Chinese film The Fox LoverDirected byNiu ChaoyangWritten byNiu ChaoyangRelease date September 28, 2013 (2013-09-28) Running time135 minutesCountryChinaLanguageMandarinBox office$4,970,000[1] The Fox Lover (Chinese: 白狐; pinyin: Bai Hu; lit. 'White Fox'[2]) is a 2013 Chinese film directed by Niu Chaoyang and starring Gillian Chung, Julian Cheung, Kara Hui and Gao Hu.[3] The film is alternatively titled The Fox Seduction in English....

 

Faro DistrictDistrictCountryPortugalRegionAlgarveHistorical provinceAlgarveNo. of municipalities16No. of parishes84CapitalFaroLuas • Total4,960 km2 (1,915 sq mi)Populasi • Total458.734 • Kepadatan92/km2 (240/sq mi)No. of parliamentary representatives9 Distrik Faro (pengucapan bahasa Portugis: [ˈfaɾu], Portugis: Distrito de Faro) merupakan sebuah distrik di Portugal yang memiliki luas wilayah 4.960 km² dan populasi 395.20...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (أبريل 2019) لوك رومانو   معلومات شخصية الميلاد 16 فبراير 1986 (38 سنة)  نيلسون  مواطنة نيوزيلندا  الطول 199 سنتيمتر  الوزن 115 كيلوغرام  الحياة العملية المهنة لاع�...

Questa voce o sezione sugli argomenti politici italiani e imprenditori italiani non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti dei progetti di riferimento 1, 2. Ritratto di Francesco Maria Capellini Stechinelli, pseudonimo di Francesco Maria Capellini (Rimini, 18 aprile 1640 – Celle, 26 novembre 1694), è stato un politico, banchi...

 

1995 Chinese filmThe Chinese FeastDVD coverDirected byTsui HarkWritten byPhilip ChengNg Man-FaiTsui HarkYuen Kai-ChiProduced byTsui HarkRaymond WongLee LingStarringLeslie CheungAnita YuenKenny BeeLaw Kar-yingCinematographyPeter PauPoon Hang-SangEdited byMarco MakMusic byLowell LoProductioncompanyFilm WorkshopDistributed byMandarin Films Ltd.Release dates 28 January 1995 (1995-01-28) (Hong Kong) 28 January 1998 (1998-01-28) (France) Running time100 minsCo...

 

У этого термина существуют и другие значения, см. Тур. Запрос «Bos taurus primigenius» перенаправляется сюда; см. также другие значения. † Тур Скелет тура Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:В...

Osilocomune(IT) Òsilo(SC) Òsile Osilo – Veduta LocalizzazioneStato Italia Regione Sardegna Provincia Sassari AmministrazioneSindacoGiovanni Ligios (lista civica) dal 31-5-2015 (2º mandato dal 26-10-2020) TerritorioCoordinate40°44′37″N 8°40′16″E / 40.743611°N 8.671111°E40.743611; 8.671111 (Osilo)Coordinate: 40°44′37″N 8°40′16″E / 40.743611°N 8.671111°E40.743611; 8.671111 (Osilo) Altitudine615 ...

 

Хип-хоп Направление популярная музыка Истоки фанкдискоэлектронная музыкадабритм-энд-блюзреггидэнсхоллджаз[1]чтение нараспев[англ.]исполнение поэзииустная поэзияозначиваниедюжины[англ.]гриотыскэтразговорный блюз Время и место возникновения Начало 1970-х, Бронкс, Н...

 

أندريا غاروسيو   معلومات شخصية الميلاد 12 يونيو 1993 (31 سنة)[1]  بريشا  الجنسية إيطاليا  الحياة العملية الفرق كولباك  [لغات أخرى]‏ (2017–2017)فريق البحرين ميريدا للدراجات الهوائية (1 أغسطس 2018–31 ديسمبر 2018)فريق البحرين ميريدا للدراجات الهوائية (2019–2019)ويلير تريس...

Village in Wiltshire, England Human settlement in EnglandAldbourneHouses round the village green, overlooked by the churchAldbourneLocation within WiltshirePopulation1,833 (2011 Census)[1]OS grid referenceSU265756Unitary authorityWiltshireCeremonial countyWiltshireRegionSouth WestCountryEnglandSovereign stateUnited KingdomPost townMarlboroughPostcode districtSN8Dialling code01672PoliceWiltshireFireDorset and WiltshireAmbulanceSouth Western UK...

 

The following highways are numbered 249: This list is incomplete; you can help by adding missing items. (August 2008) Canada Prince Edward Island Route 249 Quebec Route 249 Costa Rica National Route 249 Japan Japan National Route 249 United States Alabama State Route 249 California State Route 249 Florida State Road 249 Georgia State Route 249 (former) Indiana State Road 249 Iowa Highway 249 (former) K-249 (Kansas highway) Kentucky Route 249 Maryland Route 249 Minnesota State Highway 249 (fo...

 

American philosopher (1899–1977) For the Little Rascals actor, see Bobby Hutchins. Robert Maynard HutchinsHutchins at Yale in 19215th President of the University of ChicagoIn office1929–1945Preceded byMax MasonSucceeded byLawrence A. Kimpton Personal detailsBorn(1899-01-17)January 17, 1899Brooklyn, New York, U.S.DiedMay 14, 1977(1977-05-14) (aged 78)Santa Barbara, California, U.S.Spouse(s)Maude Hutchins Vesta Orlick HutchinsAlma materYale University (BA, LLB)OccupationEducator Robert...

Old Park WoodSite of Special Scientific InterestLocationGreater LondonGrid referenceTQ046913InterestBiologicalArea16.7 hectaresNotification1984Location mapMagic Map Steps Old Park Wood is a 16.7-hectare (41-acre) Site of Special Scientific Interest in Harefield in the London Borough of Hillingdon.[1] The south-east part is an 8-hectare (20-acre) nature reserve owned and managed by the Hertfordshire and Middlesex Wildlife Trust. The site is ancient woodland which dates back to the Dom...

 

Giornale di BresciaLogoStato Italia Linguaitaliano Periodicitàquotidiano Generestampa locale Formatoberliner FondatoreComitato di Liberazione Nazionale Fondazione1945 SedeVia Solferino, 22 - 25121 Brescia EditoreEditoriale Bresciana Diffusione cartacea26.865 (ADS 2021) DirettoreNunzia Vallini ISSN1590-346X (WC · ACNP) e 2499-099X (WC · ACNP) Sito webwww.giornaledibrescia.it   Modifica dati su Wikidata · Manuale Il Giornale di Brescia è un quotidiano della città ...

 

El Bajío beralih ke halaman ini. Untuk restoran, lihat El Bajío (restoran). Bajio Bajío (dataran rendah) adalah sebuah wilayah Meksiko Barat Laut. Wilayah tersebut meliputi negara-negara bagian Aguascalientes, Jalisco (Centro-Los Altos), Guanajuato, dan Querétaro.[1][2][3][4][1] Referensi ^ a b Microsoft Word - DTE-550 (PDF). Diarsipkan dari versi asli (PDF) tanggal 2017-03-14. Diakses tanggal 2018-07-18.  ^ Entrada Group: at the heart of Mexic...

Mechanical obstruction of the flow of air from the environment into the lungs For the psychological sports term, see Choke (sports). Not to be confused with Chowking. This article contains instructions, advice, or how-to content. Please help rewrite the content so that it is more encyclopedic or move it to Wikiversity, Wikibooks, or Wikivoyage. (February 2020) Medical conditionChokingOther namesForeign body airway obstructionA demonstration of abdominal thrusts on a person showing signs of ch...

 

هذه المقالة بحاجة لمراجعة خبير مختص في مجالها. يرجى من المختصين في مجالها مراجعتها وتطويرها. (يوليو 2016) درافيديةالتوزيعالجغرافي:جنوب آسيا وأجزاء من جنوب شرق آسيا، تحديدا جنوب الهند وسريلانكاتصنيفات اللغوية:إحدى عائلة لغات العالميةدرافيديةاللغة البدائية:بروتو-درافيديةف�...