I want to write a function that creates a copy of a double array using pointers. This is my code so far:
#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);
}
I have 2 compilation errors that I can't get rid of. I get
invalid conversion from void* to double*
when I try to allocate memory using malloc but I can't understand what I'm doing wrong.
You are using a C++ compiler.
double *array=malloc(sizeof(double)*size);
is valid in C. There is an implicit conversion from any object pointer type to void *
.
In C++ it is not valid, there is no such implicit conversion, and you need a cast:
double *array= (double *) malloc(sizeof(double)*size);
You are compiling c code, with a c++ compiler.
When you are using a c++ compiler, you should write c++ code, so malloc()
is not so common in c++, instead
double *data = new double[size];
would be good c++ code, if you need to free()
the pointer, you need to
delete[] data;
You can of course use malloc()
in c++, but it would be like this
double *data = static_cast<double *>(malloc(size * sizeof(double));
because void *
in c++ is not converted to any pointer type automatically.
In c, however, there is no need for the cast, and in fact it makes the code unnecessarily ugly apart from hiding bugs from your program, cehck here Do I cast the result of malloc?.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With