Boa tarde! Estou com certas dificuldades em se trabalhar com Pilha, ponteiros e alocação dinâmica: A lógica do programa é receber sequencia de padrões e depois a sequencia final, e contar quantas vezes a sequencia de padrões foram encontradas em sequencia final. Ao debugar este código, na função push o programa trava inesperadamente, a lógica dos restantes do programa não está completa, pois não consigo debugar p/ dar a continuidade... o que tem de errado no código galera? Sou iniciante aqui no forum e qualquer ajuda é bem-vinda! Obrigado. #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct pilha{
char *valor;
int t;
};
typedef struct pilha * Pilha;
int comparaPadrao (const void* a, const void* b){
Pilha a1 = (Pilha*)a;
Pilha b1 = (Pilha*)b;
return strcmp(a1->valor, b1->valor);
}
void push (Pilha p, char *e){
p->valor[(p->t)++] = e;
}
char pop (Pilha p){
return p->valor[--(p->t)];
}
char topo(Pilha p){
return p->valor[(p->t - 1)];
}
void destroiPilha(Pilha p){
free(p);
}
Pilha novaPilha(){
Pilha p;
//p = malloc (sizeof (struct pilha));
p = malloc (sizeof (Pilha));
if (p == NULL){
printf ("Algum erro ocorreu !\n");
exit (-1);
}
p->t = 0;
return p;
}
void detectaPadrao(Pilha p, char *vet, int qtd){
int cont = 0;
char* padFinal;
char* pad;
char espaco = ' ';
padFinal = malloc(sizeof(char) * 1000);
for(cont = 0; cont < qtd; cont++){
*pad = pop(p);
strcat(padFinal, pad);
for(cont=0; vet[cont] != ''; cont++){
if(*pad == vet[cont]){
strcat(*padFinal, espaco);
strcat(*padFinal,cont);
}
}
}
printf("%s", pad);
}
int main()
{
int qtd = 0, cont = 0, tamanho = 0, qtdTotal = 0;
char *padrão;
Pilha p = novaPilha();
printf("\nEntre com quantidade de padrão: ");
scanf("%d", &qtd);
fflush(stdin);
for(cont = 0; cont < qtd; cont++){
printf("\nEntre com o tamanho do %d padrão:", cont+1);
scanf("%d", &tamanho);
fflush(stdin);
qtdTotal += tamanho;
padrão = malloc(sizeof(char)*tamanho);
if(padrão == NULL){
printf("\nERRO!");
exit(-1);
}
printf("\nEntre com o %d padrão:", cont+1);
gets(padrão);
push(p, padrão);
}
//qtdTotal +=
printf("\nEntre com o tamanho da sequencia:");
scanf("%d", &tamanho);
fflush(stdin);
printf("\nEntre com a sequencia:", cont+1);
gets(padrão);
qsort(p, qtd, sizeof(Pilha), comparaPadrao);
detectaPadrao(p, padrão, qtd);
return 0;
}