que tienen un fallo de segmentación en el código de abajo, pero después de lo cambié a puntero a puntero, que está muy bien. ¿Alguien podría darme alguna razón?por qué se necesita puntero a puntero a asignar memoria en función de
void memory(int * p, int size) {
try {
p = (int *) malloc(size*sizeof(int));
} catch(exception& e) {
cout<<e.what()<<endl;
}
}
que no funciona en la función principal como golpe embargo
int *p = 0;
memory(p, 10);
for(int i = 0 ; i < 10; i++)
p[i] = i;
, funciona así.
void memory(int ** p, int size) { `//pointer to pointer`
try{
*p = (int *) malloc(size*sizeof(int));
} catch(exception& e) {
cout<<e.what()<<endl;
}
}
int main()
{
int *p = 0;
memory(&p, 10); //get the address of the pointer
for(int i = 0 ; i < 10; i++)
p[i] = i;
for(int i = 0 ; i < 10; i++)
cout<<*(p+i)<<" ";
return 0;
}
Como malloc nunca se arrojará, los intentos de bloques no tienen sentido. –
Esos bloques try no son válidos si esto es C. ¿Es esto realmente C++? Si es así, las etiquetas deben cambiar. –
@Fred, la pregunta también es relevante para ambos C, aunque el fragmento es C++ como usted indicó. Agregué la etiqueta C++ – hhafez