Ir para conteúdo
Fórum Script Brasil
  • 0

Duvidas pilha e alocação dinâmica em C! :(


jorgemitsu

Pergunta

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;
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...