Maison >développement back-end >C++ >Comment renvoyer correctement un tableau 2D à partir d'une fonction C ?

Comment renvoyer correctement un tableau 2D à partir d'une fonction C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-08 06:47:10948parcourir

How to Properly Return a 2D Array from a C   Function?

Renvoie des tableaux 2D en C

Renvoyer un tableau 2D à partir d'une fonction en C peut être une tâche délicate. Une approche, comme le démontre le code fourni, tente de renvoyer un tableau 2D à l'aide du code ci-dessous, mais cette approche ne convient pas.

int **MakeGridOfCounts()
{
    int cGrid[6][6] = {{0, }, {0, }, {0, }, {0, }, {0, }, {0, }};
    return cGrid;
}

Au lieu de cela, une approche viable consiste à créer et à renvoyer un pointeur vers le Tableau 2D utilisant l'allocation dynamique de mémoire. Explorons comment cela est réalisé avec un exemple de code amélioré :

#include <cstdio>

int** create2DArray(unsigned height, unsigned width) { .... } 
  1. Créer le tableau 2D ( create2DArray() ):

    • Tout d'abord, nous créons un pointeur vers le tableau 2D et un pointeur vers chaque individu rangée.
    • Nous allouons de la mémoire pour les lignes puis pour chaque ligne, nous allouons de la mémoire pour les colonnes.
int** array2D = new int*[height];
for (int h = 0; h < height; h++) {
   array2D[h] = new int[width];
   .
   .
   .
}
  1. Renvoyer le tableau (create2DArray() ):

    • Une fois le tableau créé, le pointeur vers la première ligne (array2D) est renvoyé. Ce pointeur représente l'ensemble du tableau.
  2. Nettoyer la mémoire (main() ) :

    • Il est crucial de libérer la mémoire allouée au tableau 2D une fois qu'elle n'est plus nécessaire. Cela implique de supprimer la mémoire de chaque ligne, puis le pointeur vers la première ligne pour éviter les fuites de mémoire.
for (int h = 0; h < height; h++) {
  delete [] array2D[h]; 
}
delete [] array2D;

Cette approche garantit une bonne gestion de la mémoire et fournit un moyen de renvoyer un Tableau 2D à partir d'une fonction en C .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn