Aquí estoy ejecutando un código simple en C. Se está compilando bien pero falla durante el tiempo de ejecución.
#include <stdio.h> #include <conio.h> void sum(int x,int y,int *z) { *z=x+y; } void main() { int a=10,b=20,*c; sum(a,b,c); printf("sum is %d\n",*c); }¿Alguien puede señalar cuál es el problema? Además, ¿cómo se pasa un puntero a una función?
Su error es que pasó un puntero entero no inicializado a una función y luego usó el puntero. Lo que probablemente pretendía hacer era asignar automáticamente un número entero en la pila y luego pasar la dirección de dicho número entero a la función.
#include <stdio.h> #include <conio.h> void sum(int x,int y,int *z) { *z=x+y; } void main() { int a=10,b=20,c; // Automatically allocate an integer on the stack sum(a,b,&c); // Third argument is the address of the integer printf("sum is %d\n",c); } La clave es recordar que cuando haces int *c estás asignando un puntero, cuando haces int c estás asignando un número entero. Si desea modificar una variable pasada a una función, el patrón típico en C es pasar la dirección de dicha variable, pero primero debe asignar el tipo adecuado, en este caso un int y no un int * . Luego puede usar la dirección del operador & para obtener la dirección de los datos relevantes que luego pasa como el argumento de la función.
El problema en su programa anterior es el puntero unitario c . Entonces puede asignar memoria a c usando malloc -
#include <stdio.h> #include <stdlib.h> void sum(int x,int y,int *z) { *z=x+y; } int main() // declare main as int. { int a=10,b=20,*c; c=malloc(sizeof(int)); //allocating memory to pointer c sum(a,b,c); printf("sum is %d\n",*c); free(c); // freeing allocated memory retrirn 0; }