Search code examples
arrayscdev-c++

answers getting error while 3D array declare in C


I am having an error since I needed to turn a 2d array into a 3d array. I understand this because if I put the array assignment in comment, I no longer have the problem. I also send here the part of the code where I assign the 3d array.

    consulta agendaMedicos[50][50][50]; 
    consulta agendaEnfermeiros[50][50][50];

I don't think it's relevant but the struct I use is this:

typedef struct Consulta {

    char nomeUtente[70];
    int numSNS;
    int dia;
    int mes;
    int ano;
    int horasInicio;
    int minutosInicio;
    int horasFim;
    int minutosFim;

} consulta;

Here is an example of how I send the array to a new function

void novaConsulta(int *nAgendasMedico, consulta agendaMedicos[][50][50], int membroEscolhido, int clinicaSelecionada)

Here my only function :

void novaConsulta(int *nAgendasMedico, consulta agendaMedicos[][50][50], int membroEscolhido, int clinicaSelecionada)
{
    
    do 
    {
                
        puts("Insira o dia:");
        scanf("%d", &agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);
        system("cls");
                
    }while (agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia < 0 || agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia > 31);
    
    printf("%d", agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);
    
}

Here my main code :


int main(int argc, char *argv[]) {
    
    int membroEscolhido = 1, clinicaSelecionada = 0;
    
    int nAgendasMedico[50];
    
    consulta agendaMedicos[50][50][50]; 
    consulta agendaEnfermeiros[50][50][50];
    
    nAgendasMedico[membroEscolhido] = 0;
    
    novaConsulta(nAgendasMedico, agendaMedicos, membroEscolhido, clinicaSelecionada);
    
    nAgendasMedico[membroEscolhido]++;
    
    return 0;
}

When I compile the program, no error appears, what happens is that the program closes after a while, as in the image:

enter image description here

There is my minimal reproducible example:


#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */



typedef struct Consulta {

    char nomeUtente[70];
    int numSNS;
    int dia;
    int mes;
    int ano;
    int horasInicio;
    int minutosInicio;
    int horasFim;
    int minutosFim;

} consulta;

void novaConsulta(int *nAgendasMedico, consulta agendaMedicos[][50][50], int membroEscolhido, int clinicaSelecionada);

int main(int argc, char *argv[]) {
    
    int membroEscolhido = 1, clinicaSelecionada = 0;
    
    int nAgendasMedico[50];
    
    consulta agendaMedicos[50][50][50]; 
    consulta agendaEnfermeiros[50][50][50];
    
    nAgendasMedico[membroEscolhido] = 0;
    
    novaConsulta(nAgendasMedico, agendaMedicos, membroEscolhido, clinicaSelecionada);
    
    nAgendasMedico[membroEscolhido]++;
    
    return 0;
}

void novaConsulta(int *nAgendasMedico, consulta agendaMedicos[][50][50], int membroEscolhido, int clinicaSelecionada)
{
    
    do 
    {
                
        puts("Insira o dia:");
        scanf("%d", &agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);
        system("cls");
                
    }while (agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia < 0 || agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia > 31);
    
    printf("%d", agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);
    
}

My development program is DevC++ an C language. Thank you all


Solution

  • moving the 3d arrays from the stack (approx 11.2 million bytes each) to the file global space results in the following code:

    #include <stdio.h>
    #include <stdlib.h>
    
    // much more flexible to separate definition of the struct
    // from a 'typedef' for that struct
    
    struct Consulta 
    {
        char nomeUtente[70];
        int numSNS;
        int dia;
        int mes;
        int ano;
        int horasInicio;
        int minutosInicio;
        int horasFim;
        int minutosFim;
    };
    
    typedef struct Consulta consulta;
    
    
    consulta agendaMedicos[50][50][50]; // <- in file global space
    
    
    void novaConsulta(int *nAgendasMedico, consulta agendaMedicos[][50][50], int membroEscolhido, int clinicaSelecionada)
    {  
        do 
        {                
            puts("Insira o dia:");
            scanf("%d", &agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);
            //system("cls");             
        }while (agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia < 0 || agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia > 31);
        
        printf("%d", agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);    
    }
    
    // notice the correction to the `main()` signature
    // so compiler does not output 2 warning messages
    // about unused parameters
    
    int main( void )   
    {
        int membroEscolhido = 1;
        int clinicaSelecionada = 0;
        
        int nAgendasMedico[50];
        
    
        //consulta agendaEnfermeiros[50][50][50]; // moved to file global space
        
        nAgendasMedico[membroEscolhido] = 0;
        
        novaConsulta(nAgendasMedico, agendaMedicos, membroEscolhido, clinicaSelecionada);
        
        nAgendasMedico[membroEscolhido]++;
        
        return 0;
    }