Je veux écrire une fonction qui crée une copie d'un double tableau à l'aide de pointeurs. Voici mon code jusqu'à présent:
#include <stdio.h>
#include <stdlib.h>
double* copy (double *array, int size)
{
double *v=malloc(sizeof(double)*size);
for (int i=0; i<size; i++)
*(v+i)=*(array+i);
return v;
}
int main ()
{
//double array[];
int size;
printf ("size= "); scanf ("%i",&size);
double *array=malloc(sizeof(double)*size);
for (int i=0; i<size; i++)
scanf("%f",&array[i]);
copy(array,size);
free(array);
}
J'ai 2 erreurs de compilation dont je ne peux pas me débarrasser. Je reçois
conversion invalide de void * en double *
lorsque j'essaie d'allouer de la mémoire à l'aide de malloc, mais je ne comprends pas ce que je fais mal.
Vous utilisez un compilateur C++.
double *array=malloc(sizeof(double)*size);
est valide en C. Il existe une conversion implicite de tout type de pointeur d'objet en void *
.
En C++, il n'est pas valide, il n'y a pas de conversion implicite de ce type et vous avez besoin d'un cast:
double *array= (double *) malloc(sizeof(double)*size);
Vous compilez du code c, avec un compilateur c ++.
Lorsque vous utilisez un compilateur c ++, vous devez écrire du code c ++, donc malloc()
n'est pas si courant en c ++, à la place
double *data = new double[size];
serait un bon code c ++, si vous avez besoin de free()
le pointeur, vous devez
delete[] data;
Vous pouvez bien sûr utiliser malloc()
en c ++, mais ce serait comme ça
double *data = static_cast<double *>(malloc(size * sizeof(double));
car void *
en c ++ n'est pas automatiquement converti en n'importe quel type de pointeur.
En c, cependant, il n'y a pas besoin de cast, et en fait cela rend le code inutilement laid en plus de cacher les bugs de votre programme, cehck ici Est-ce que je cast le résultat de malloc? .