[AJUDA] Alocação dinâmica e estruturas em C++ [RESOLVIDO]

1. [AJUDA] Alocação dinâmica e estruturas em C++ [RESOLVIDO]

Augusto Dias
dnzzzz

(usa Ubuntu)

Enviado em 28/05/2016 - 02:01h

Olá!

Estou com uma dúvida, existe algum modo de alocar um vetor dinâmico dentro de uma estrutura em C++?
Dessa forma que eu fiz o código é compilado normalmente, mas ao executar ele sai do programa quando tenta alocar o tamanho dos vetores recurso e processo. Se alguém puder ajudar, agradeço!

typedef struct TComputador{
int maxRec;
int maxPrc;
int numPrc;
double exec;
TRecurso **recurso;
TProcesso **processo;
} cmp;


TComputador *iniComputador(int rec, int prc){
TComputador *cmp = new TComputador;
int tipo;
double cap, vel;
if(cmp != NULL){
*cmp->processo = new TProcesso[prc];
*cmp->recurso = new TRecurso[rec];
cmp->maxPrc = prc;
cmp->maxRec = rec;
cmp->numPrc = 0;
for(int i = 0; i < rec; i++){
cin >> tipo;
cin >> cap;
cin >> vel;
addRecurso(cmp->recurso[i], tipo, cap, vel);
}
}
return cmp;
}



  


2. Re: [AJUDA] Alocação dinâmica e estruturas em C++

Paulo
paulo1205

(usa Ubuntu)

Enviado em 28/05/2016 - 16:57h

Não me pareceu haver erro nenhum na forma do código.

Como você sabe que o problema é na hora da alocação? Com que mensagem seu programa aborta quando o problema ocorre?

EM TEMPO: Como você está usando C++, e a função iniComputador() parece ser o único meio correto de criar novos objetos do tipo TComputador. por que você não faz TComputador uma classe, e transforma iniComputador() no seu construtor (junto, é claro, com o destrutor que vai desalocar os recursos que você alocou na construção)?


3. Re: [AJUDA] Alocação dinâmica e estruturas em C++

Augusto Dias
dnzzzz

(usa Ubuntu)

Enviado em 28/05/2016 - 22:21h

paulo1205 escreveu:

Não me pareceu haver erro nenhum na forma do código.

Como você sabe que o problema é na hora da alocação? Com que mensagem seu programa aborta quando o problema ocorre?

EM TEMPO: Como você está usando C++, e a função iniComputador() parece ser o único meio correto de criar novos objetos do tipo TComputador. por que você não faz TComputador uma classe, e transforma iniComputador() no seu construtor (junto, é claro, com o destrutor que vai desalocar os recursos que você alocou na construção)?


É para um trabalho da faculdade e ainda não vimos classe, a professora provavelmente não gostaria que usássemos. O programa simplesmente encerra quando chega na alocação. Coloquei um cout << "aqui!" antes de alocar e um cout << "ali!" depois. Apenas o "aqui!" apareceu, por isso imagino que este seja o problema. Mas é realmente possível fazer isso que estou tentando? Alocar um vetor dinamicamente dentro de uma estrutura? Isso não ultrapassaria a memória previamente alocada para a estrutura, uma vez que não estavam inclusos os tamanhos dos vetores?

EDIT: O erro que aparece é: Falha de segmentação (imagem do núcleo gravada)


4. Re: [AJUDA] Alocação dinâmica e estruturas em C++ [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 28/05/2016 - 23:08h

Somente encerra, sem imprimir nada no terminal ou indicar um código de saída? Que sistema operacional ou ambiente de programação você está usando? Quanto de memória você está tentando alocar?


5. Re: [AJUDA] Alocação dinâmica e estruturas em C++

Augusto Dias
dnzzzz

(usa Ubuntu)

Enviado em 28/05/2016 - 23:14h

paulo1205 escreveu:

Somente encerra, sem imprimir nada no terminal ou indicar um código de saída? Que sistema operacional ou ambiente de programação você está usando? Quanto de memória você está tentando alocar?


Encerra informando -1, uso Ubuntu 16.04 LTS, IDE Eclipse Neon, compilando com o GCC Linux.
TRecurso é composto de:

struct TRecurso {
int tipo;
double uso;
double cap;
double vel;
};

TProcesso, onde preciso de um vetor dinamico de ponteiros TTarefa:

typedef struct TProcesso{
TTarefa **tarefas;
double exec;
int cmp;
int totalTarefas;
int done;
} prc;

e TTarefa:

typedef struct TTarefa {
int tipo;
double dem;
int done;
} task;



6. Erro encontrado!

Augusto Dias
dnzzzz

(usa Ubuntu)

Enviado em 29/05/2016 - 01:57h

Não passou de um erro de notação! Me embaralhei com os ponteiros.

A alocação deve ser feita dessa forma:

cmp->processo = new TProcesso*[prc];
cmp->recurso = new TRecurso*[rec];







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts