1
Hello, the following code is in segmentation failure. Basically I can’t scan this entrance:
ISCOD4 2 3 10 20
1 10.1.1.151 10.1.2.151 10240 1
2 10.1.1.153 10.1.4.152 12288 2
3 10.1.1.156 10.1.4.153 14336 3
4 10.1.1.156 10.1.2.150 2048 1
5 10.1.1.157 10.1.3.150 2048 2
6 10.1.1.158 10.1.4.150 2048 3
7 10.1.1.158 10.1.4.150 2048 3
8 10.1.1.157 10.1.4.150 2048 2
9 10.1.1.158 10.1.4.150 2048 3
10 10.1.1.158 10.1.4.150 2048 3
-1
Follow the entire code below:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
void* *vetor;
int tamanho;
int ocupacao;
} VD;
typedef struct{
void* *vetor;
int tamanho;
int ocupacao;
} VDFila;
typedef struct {
char id[7];
int cap_enlace;
int priori;
int tam_inicial;
int prop;
VD filas;
} TypeRouter;
typedef struct {
int tempo_chegada;
char ip_origem[15];
char ip_destino[15];
int tamanho;
int priori;
} Pacote;
VD criarVetor(){
VD vetor;
vetor.tamanho = 2;
vetor.ocupacao = 0;
vetor.vetor = malloc(sizeof(void*)*vetor.tamanho);
return vetor;
}
void inserirVD(VD *vetor, void* fila){
if (vetor->ocupacao == vetor->tamanho){
vetor->tamanho = vetor->tamanho*2;
vetor->vetor = realloc(vetor->vetor, sizeof(void*)*vetor->tamanho);
}
vetor->vetor[vetor->ocupacao] = fila;
vetor->ocupacao++;
}
VDFila criarFila(){
VDFila fila;
fila.tamanho = 2;
fila.ocupacao = 0;
fila.vetor = malloc(sizeof(void*)*fila.tamanho);
return fila;
}
void enfileirar(VDFila *fila, void* elemento){
if (fila->tamanho == fila->ocupacao){
fila->tamanho = fila->tamanho*2;
fila->vetor = realloc(fila->vetor, sizeof(void*)*fila->tamanho);
}
fila->vetor[fila->ocupacao] = elemento;
fila->ocupacao++;
}
void desenfileirar(VDFila *fila){
int i;
for (i = 0; i < (fila->ocupacao - 1); i++){
fila->vetor[i] = fila->vetor[i+1];
}
fila->ocupacao--;
}
short vazia(VDFila *fila){
short vazia = 0;
if(fila->ocupacao == 0){
vazia = 1;
}
return vazia;
}
TypeRouter gerarRouter(){
TypeRouter router;
VDFila fila;
int i;
scanf("%s", router.id);
scanf("%d%d%d%d", &router.cap_enlace, &router.priori, &router.tam_inicial, &router.prop);
router.filas = criarVetor();
for (i = 0; i < router.priori; i++){
fila = criarFila();
inserirVD(&router.filas, &fila);
}
return router;
}
Pacote* ler(int tempo){
Pacote *pckt;
Pacote pacote;
pckt = malloc(sizeof(Pacote));
pacote.tempo_chegada = tempo;
scanf("%s %s", pacote.ip_origem, pacote.ip_destino);
scanf("%d%d", &pacote.tamanho, &pacote.priori);
*pckt = pacote;
return pckt;
}
void receberPacote(TypeRouter *router, int prioridade, Pacote *pacote){
VDFila *fila;
fila = router->filas.vetor[prioridade-1];
enfileirar(fila, pacote);
}
void main(){
TypeRouter router = gerarRouter();
Pacote* pacote;
int tempo;
scanf("%d", &tempo);
while(tempo >= 0){
pacote = ler(tempo);
receberPacote(&router, pacote->priori, pacote);
scanf("%d", &tempo);
}
}
I tried to see the read and router function, but always after the second line of the scanf the crash program.
Can explain the format of the input?
– Jefferson Quesado
Typerouter and Package Type
– Terminator
char is used and integer in the first input and then whole char char is used in the second integer, which comes in a loop until the first integer is -1.
– Terminator