J'ai le code suivant:
int *numberArray = calloc(n, sizeof(int));
Et je n'arrive pas à comprendre pourquoi je reçois l'erreur suivante.
Cannot initialize a variable of type 'int *' with an rvalue of type 'void *'`.
Je vous remercie.
Le message d'erreur du compilateur est très clair.
La valeur de retour de calloc
est void*
. Vous l'affectez à une variable de type int*
.
C'est correct avec un programme C, mais pas avec un programme C++.
Vous pouvez changer cette ligne en
int* numberArray = (int*)calloc(n, sizeof(int));
Mais, une meilleure alternative sera d'utiliser l'opérateur new
pour allouer de la mémoire. Après tout, vous utilisez C++.
int* numberArray = new int[n];
void* calloc (size_t num, size_t size);
Allouer et initialiser le tableau à zéro. Alloue un bloc de mémoire pour un tableau d'éléments num, chacun de taille octet long, et initialise tous ses bits à zéro.Le résultat effectif est l'allocation d'un bloc de mémoire initialisé à zéro d'octets (num * size).
En cas de succès, un pointeur sur le bloc mémoire alloué par la fonction. Le type de ce pointeur est toujours vide *, qui peut être converti en le type de pointeur de données souhaité afin d'être déréférencable. Si la fonction n'a pas pu allouer le bloc de mémoire demandé, un pointeur nul est renvoyé.
Pour résumer, puisque calloc
renvoie un void*
(pointeur générique) en cas de succès de l'allocation de mémoire, vous devrez le transtyper comme ceci en C++:
int *numberArray = (int*)calloc(n, sizeof(int));
Si c'était C, vous pouvez toujours ignorer cette distribution.
Ou utilisez new
comme:
int *numberArray = new int [n];
Vous utilisez le style de réallocation de mémoire C dans un code C++. Ce que vous voulez utiliser est new
en C++
Votre code deviendra donc:
int n = 10; //n = size of your array
int *narray = new int[n];
for (int i = 0; i < n; i++)
cout << narray[i];
Vous pouvez également revenir à C et utiliser calloc avec le casting.
int* numberArray = (int*)calloc(n, sizeof(int));
La syntaxe de calloc est:
void * calloc (size_t num, size_t size);
calloc renvoie un pointeur vide. Dans votre code, vous essayez d'attribuer un pointeur vide à un pointeur entier. Vous obtenez donc Impossible d'initialiser une variable de type 'int *' avec une valeur de type 'void *'. Donc, transformez le pointeur vide avant de l'attribuer comme ceci
* numberArray = (int *) calloc (n, sizeof (int));