Urgente!! problemas com ponteiros

1. Urgente!! problemas com ponteiros

RCA
RCA_ITA

(usa Ubuntu)

Enviado em 11/04/2009 - 01:32h

algumém pode me ajudar com o seguinte problema, eu tenho que implementar um fila de prioridade usando um lista encadeada, e esta fila sera usado para um posto de saude, onde pede que organize-a pela ordem alfabética e pessoa com mais de 50 anos fiquem na frente. Abaixo segue a classe lista(onde me enganchei)

#include <iostream>
#include <cstdlib>
#include <string>


using namespace std;

#ifndef _LISTA_H_
#define _LISTA_H_

class Lista{

struct No{
string nome;
int idade;
/*struct*/ No *prox;
/*struct*/ No *ant;
};

public:
No *primeiro;
No *ultimo;
int tamanho;

public:
Lista();
~Lista();
void inserirNoInicio(string,int);
void inserirNoFinal(string,int);
string removerNoInicio();
string removerNoFinal();
void listar();
bool estaVazio();

};
#endif

void Lista::inserirNoInicio(string nome,int idade)
{

if(primeiro == NULL){
primeiro = (No*)malloc(sizeof(No));
primeiro->nome = nome;
primeiro->idade = idade;
primeiro->prox = NULL;
primeiro->ant = NULL;
ultimo = primeiro;
}else{
No *a = (No*)malloc(sizeof(No));
a->nome = nome;
a->idade = idade;
a->prox = primeiro;
primeiro->ant=a;
primeiro = a;
primeiro->ant=NULL;
}
};

quando crio um while para adicionar varios elementos, ele da o seguinte erro
in __gnu_cxx::exchange_and_add(volatile*,int) ()

acho que é na string nome e no int idade, pois eu comentei essas variáves no codigo e os nos foram criados. alguém sabe o que esta acontecendo?




  


2. Re: Urgente!! problemas com ponteiros

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 11/04/2009 - 12:02h

não sei se é o seu caso, mas esse problema está relacionado com:
http://gcc.gnu.org/ml/libstdc++/2004-02/msg00372.html
que por sua vez tem a ver com a configuração da libstdc++

qual a versão do seu gcc? se for <= 4.2, considere atualizar para a última versão disponível para sua distro (provavelmente 4.3.3).
testei sua classe com as versões 4.3.3, 4.4.0 (última estável) e 4.5.0 (devel) e tudo compilou nos conformes.


3. Re: Urgente!! problemas com ponteiros

RCA
RCA_ITA

(usa Ubuntu)

Enviado em 11/04/2009 - 12:27h

Vou verificar isso, mas acho que vc tem razão o problema apontado é este.
No entanto, algo interessante acontece, pois eu uso assim l->inserirNoInicio("algo",1); em vários linhas e funciona, mas quando eu uso um while e leio as variaveis do teclado da erro(esse que falei)


4. Se bazeia aqui amigo :

André
andrezc

(usa Debian)

Enviado em 24/04/2009 - 20:13h

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void limpa() {
printf("\e[H\e[2J");
}

void registra(char nome[15], int telefone) {
FILE *fd;
fd=fopen("nomesagenda","a");
fprintf(fd, "%s\n", nome);
fprintf(fd, "%d\n", telefone);
printf("\n\tDados registrados!\n");
fclose(fd);
getchar();
}

void listalimp() {
FILE *fd;
fd=fopen("nomesagenda","w+");
printf("\n\tLista limpa!\n");
fclose(fd);
getchar();
}

void pesquisa(char pesq[])
{
FILE *fd;
char curs[15];
int telefone, existe=0;
fd=fopen("nomesagenda","r");
while ((fscanf(fd,"%s", curs))!=EOF)
if (!strcmp(curs, pesq)) {
printf("\n\tNome: %s", curs);
fscanf(fd,"\n%d", &telefone);
printf("\n\tTelefone: %d\n", telefone);
fscanf(fd,"\n");
existe=1;
}
else fscanf(fd,"\n\n");
if (existe==0) printf("Cadastro inexistente!\n");
getchar();
fclose(fd);
}

void listar() {
FILE *fd;
char curs[15];
int telefone,i=0;
fd=fopen("nomesagenda","r");
while ((fscanf(fd,"%s", curs))!=EOF) {
printf("\n\tNome: %s",curs);
fscanf(fd,"\n%d", &telefone);
printf("\n\tTelefone: %d\n", telefone);
fscanf(fd,"\n");
i++;
}
printf("\n\tTotal de registros: %d",i);
}

int main(void) {
FILE *fd;
int menu,tamnome,telefone;
char nome[15];
while (menu!=0) {
limpa();
printf("\n\t Agenda de telefones. -Por hunz.\n");
printf("\n\t(1)\tRegistrar nome.");
printf("\n\t(2)\tProcurar nome.");
printf("\n\t(3)\tListar nomes.");
printf("\n\t(4)\tLimpar lista.");
printf("\n\t(5)\tSobre.");
printf("\n\n\t(0)\tSair.");
printf("\n\n[Menu-HZ]$ ");
scanf("%d",&menu);
getchar();
switch (menu) {
case 1: {
printf("\n\tEntre com o Nome: ");
scanf("%s",&nome);
getchar();
tamnome=strlen(nome);
if (tamnome>15) {
printf("O tamanho do nome passa de 15 letras.\n");
getchar(); getchar();
}
else {
printf("\n\tEntre com o Telefone: ");
scanf("%d",&telefone);
getchar();
registra(nome, telefone);
}
} break;
case 2: {
printf("\n\tEntre com o Nome: ");
scanf("%s",&nome);
getchar();
tamnome=strlen(nome);
if (tamnome>15) {
printf("O tamanho do nome passa de 15 letras.\n");
getchar(); getchar();
}
else {
pesquisa(nome);
}
} break;
case 3: {
listar();
getchar();
} break;
case 4: {
listalimp();
getchar();
} break;
case 5: {
printf("\n\tAgenda .\n\t\n");
getchar();
} break;
case 0: break;
default: {
printf("\n\tOpcao invalida..\n");
getchar(); getchar();
};
}
}
return(0);
}



5. while

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 25/04/2009 - 01:12h

cade seu código do while???
Creio que você não esteja criando uma nova string a cada vez que chama a função, mas esteja associando a string a algum ponteiro de forma incorreta... algo assim... mas preciso do resto do código para ver...



6. Re: Urgente!! problemas com ponteiros

Ronaldo Faria Lima
ron_lima

(usa Slackware)

Enviado em 24/05/2009 - 15:19h

Ao invés de tentar reinventar a roda, por que você não usa a STL? Há implementações de listas, sets, multisets e outras estruturas de dados já totalmente implementadas e que fazem parte do padrão da linguagem.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts