Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Error de segmentación con punteros y memoria dinámica (https://www.clubdelphi.com/foros/showthread.php?t=92907)

aguml 10-03-2018 16:02:27

Error de segmentación con punteros y memoria dinámica
 
Hola amigos, hice un pequeño código en C para obtener el mcm y el mcd de varios números y el fallo que tengo es al rellenar el array dinámico, me da un error de segmentación. La función es getArray. Aquí mi código:
Código PHP:

#include <stdio.h>
#include <stdlib.h>
 
/*
Función que muestra el menu principal
*/
int menu(void){
    
int op;
    
system("CLS");
    
printf("1-Maximo Comun Divisor\n");
    
printf("2-Minimo Comun Multiplo\n");
    
printf("0-salir\n");
    
printf("\n");
    
printf("Elige una opcion: ");
    
scanf("%d",&op);
    return 
op;
}

/*
Función que obtiene el array con los valores
*/
int getArray(int **num){
    
int i,size;
    if(*
num!=NULL){
        
free(*num);
        *
num=NULL;
    }
    
printf("Ingrese el numero de valores: ");
    
scanf("%d",&size);
    *
num=malloc(sizeof(int)*size);
    for(
i=0;i<size;i++){
         
printf("Ingrese numero: ");
         
scanf("%d",num[i]);
    }
    return 
size;
}

/*
Función principal
*/
int main(void) {
    
int *num=NULL,i,op,salir=0;
    do{
        
op=menu();
        switch(
op){
            case 
1:
                
i=getArray(&num);
                
printf("El M.C.D es: %d\n",mcd(num,i));
                break;
            case 
2:
                
i=getArray(&num);
                
printf("El M.C.M es: %d\n",mcm(num,i));
                break;
            case 
0:
                
printf("Pulsa intro para salir");
                
salir=1;
                break;
            default:
                
printf("Opcion incorrecta. Pulse intro para volver a intentarlo.\n");
       }
       
system("PAUSE");
       if(
num!=NULL){
           
free(num);
           
num=NULL;
       }
    }while(
salir !=1);
    return 
0;
}
 
/*
Función para calcular el mayor de x números
*/
int max(int *num,int size) {
    
int i,mayor=0;
    for(
i=0;i<size;i++){
        if (
num[i]>mayor) {
            
mayor=num[i];
        }
    }
    return 
mayor;
}
 
/*
Función para calcular el menor de x números
*/
int min(int *numint size) {
    
int i,menor=num[0];
    for(
i=0;i<size;i++){
        if (
num[i]<menor) {
            
menor=num[i];
        }
    }
    return 
menor;
}
 
/*
Función para hallar el Máximo Común Divisor por fuerza bruta
*/
int mcd(int *numint size) {
    
int mcd 1,contador,i;
    
int b min(numsize);
    do {
        
contador=0;
        for(
i=0;i<size;i++){
            if(
num[i]%b==0){
                
contador++;
            }
        }
        if(
contador==size){
            
mcd=b;
        }
        
b--;
    } while(
contador !=size);
    return 
mcd;
}
 
/*
Función para hallar el Mínimo Común Múltiplo por fuerza bruta
*/
int mcm(int *numint size) {
    
int mcm 0,j=1,contador,i;
    
int b min(numsize);
    do{
        
contador=0;
        
mcm=b*j;
        for(
i=0;i<size;i++){
            if(
mcm%num[i]==0){
                
contador++;
            }
        }
        
j++;
   }while (
contador !=size);
    return 
mcm;



aguml 10-03-2018 19:32:38

Solucionado con esto:
Código PHP:

scanf("%d",&((*num)[i])); 



La franja horaria es GMT +2. Ahora son las 16:15:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi