Boa tarde,
pois bem, estou tentando fazer uma alocação dinâmica de uma matriz tridimensional, só que meu código está dando erro de runtime.
#include<stdio.h>#include<stdlib.h>voidmain(){int***vetor,*nodos;intgrafos,num=0;scanf("%i",&grafos);if((**vetor=(int*)malloc(sizeof(int*)*grafos))/* erro aqui */&&(nodos=(int*)malloc(sizeof(int)*grafos))){while(num<=grafos){scanf("%i",nodos[num]);if(*vetor[num]=(int*)malloc(sizeof(int*)*nodos[num])){inti;for(i=0;i<nodos[num];i++){if(vetor[num][i]=(int*)malloc(sizeof(int)*nodos[num]));else{printf("Erro na alocacao de memoria.\n");exit(-1);}}}else{printf("Erro na alocacao de memoria.\n");exit(-1);}}}else{printf("Erro na alocacao de memoria.\n");exit(-1);}}
Alguém tem idéia do que possa estar causando o problema?
Use C++ e boost::shared_ptr e liberte-se do malloc. Ele é uma das razões pelas quais eu não gosto de programar em C puro; nunca sei por que é que dá o tal erro de execução sem perder alguns dias (ou até semanas) - na prática, jogo o código fora e escrevo em C++.
MaikoID
primeiro, não tenho certeza, mas não se pode declarar vetores de 3 dimensões e de apenas 1 na mesma linha.
int*** vetor;
int* nodos;
int grafos, num = 0;
Já que int*** é um tipo bem diferente de int*
e esta faltando o & no
scanf("%i",&nodos[num]);
muda o retorno de void pra int, e coloca um return 0; no final.
Stormqueen1990
Não vou dizer que a idéia não seja boa, mas como se trata de um trabalho de faculdade e nem todos dominam C++, isso não é uma opção para mim.
De qualquer forma, obrigada.
Stormqueen1990
MaikoID:
primeiro, não tenho certeza, mas não se pode declarar vetores de 3 dimensões e de apenas 1 na mesma linha.
int*** vetor;
int* nodos;
int grafos, num = 0;
Já que int*** é um tipo bem diferente de int*
Será esse o problema? Vou testar mudar a declaração.
Sobre o &… Meu código não chega a passar da alocação de ***vetor.
MaikoID
Pensei que fosse problema de compilaçao… vou dar uma olhada na execuçao agora.
abraço.
E
enantiomero
Dei uma ajeitada no seu código, agora deve executar sem problemas. Por favor, arrume-o para tratar os erros de alocação - tirei essa parte para poder enxergar o que deveria ser feito.
#include<stdio.h>#include<stdlib.h>voidmain(){int***vetor,*nodos;intgrafos,num;inti;puts("Entre com o numero de grafos:");scanf("%i",&grafos);//Atencao,parasimplificarnaoestoutestandosemallocretornouNULLounao.//Testeseestadeacordocomoquevocequer,edepoisponhaotratamentodeNULL.//Outracoisaqueajudamuitoehusarcallocemvezdemalloc,porque//elejadeixaamemoriainicializadacomzeros,oqueajudamuitoaresolverproblemas//detempodeexecucao.Paraseuuso,adiferencadetempoehabsolutamentenegligenciavel.vetor=(int***)calloc(grafos,sizeof(int**));nodos=(int*)calloc(grafos,sizeof(int));for(num=0;num<grafos;++num){printf("Entre com o numero de nodos do grafo %d\n",num);scanf("%i",&nodos[num]);vetor[num]=(int**)calloc(nodos[num],sizeof(int*));for(i=0;i<nodos[num];++i){vetor[num][i]=(int*)calloc(nodos[num],sizeof(int));}}}
Stormqueen1990
enantiomero:
Dei uma ajeitada no seu código, agora deve executar sem problemas. Por favor, arrume-o para tratar os erros de alocação - tirei essa parte para poder enxergar o que deveria ser feito.
Obrigada pela ajuda e pelas dicas! Consegui achar e resolver o problema com base no código que vc refez.