/ / Allocation dynamique à un tableau de pointeurs et à ses alternatives - c ++, tableaux, pointeurs, gestion de la mémoire, allocation dynamique

Allocation dynamique à un tableau de pointeurs et à ses alternatives - c ++, tableaux, pointeurs, gestion de la mémoire, allocation dynamique

La méthode standard pour allouer un tableau en utilisant new int est la suivante:

 int* arr = new int[50];

tout en le déclarant de cette manière, il y aura une allocation de mémoire contiguë et une seule variable de tableau dans la pile de variables.

si je veux le déclarer sous la forme de 50différentes variables de pointeur pour que chaque pointeur ait une adresse mémoire différente et pas nécessairement contiguë, la façon la plus évidente de procéder est la suivante:

int * arr[50];

mais de cette manière, quels seraient la commande / le code pour l’affectation de mémoire (c’est-à-dire via new int) et quels sont les inconvénients ou les avantages de la déclaration de chaque manière.

Réponses:

6 pour la réponse № 1

La manière évidente serait de parcourir tous les éléments et d’allouer de la mémoire pour eux:

for (int i = 0; i < 50; i++){
arr[i] = new int;
}

L'inconvénient d'un bloc de mémoire non contigu serait les erreurs de cache. Vous pouvez en lire plus à ce sujet ici.


3 pour la réponse № 2

Comment assigner, est déjà mentionné dans cette réponse; Par conséquent, ne pas répéter.
Pour célibataire int allocation, votre ligne ci-dessous est une overkill:

int* arr[50];  // all downsides only

Au lieu de cela, vous devriez utiliser des entiers simples:

int arr[50];

Mieux vaut utiliser les installations par des conteneurs standard tels que:

std::vector<int> vi;  // if the number of int-s are dynamic
std::array<int, 50> ai; // if the number of int-s are fixed

Enfin, de cette réponse,

"Évitez les pointeurs tant que vous ne le pouvez pas ... Donc, la règle de base consiste à utiliser des pointeurs uniquement s'il n'y a pas d'autre choix."