begin process at 2012 05 30 01:42:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Base de données

 > 

Autre

 > 

Problème d allocation dynamique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème d allocation dynamique

mardi 14 février 2012 à 00:58:34 | Problème d allocation dynamique

Beqtb0x

/*Bonjour a tous, je viens d'arriver sur ce site, je suis étudiant en première année d'informatique et j'ai un problème a un tp que même la prof n'est pas parvenu a m'expliquer merci de me donner un petit coup de pouce =).

Voici le code lorsque j'affiche les mots du dictionnaire il affiche x fois (dépend du nombre de mots sélectionnés par l'utilisateur) le dernier mot qui a été entré dans la fonction remplir dictionnaire (1) et plus précisément je pense que le problème et que je manipule des pointeur sur objet avec maladresse mais je ne sais pas que faire pour que chaque pointeur pointe bien sur le mot que je désir.

PS : en commentaire les problème au ligne correspondante
*/
#include <iostream>
#include<string.h>
#include<stdio.h>

using namespace std;


struct mot
{
char*tab;
int nb_synonymes;
int nb_max_synonymes;
char**synonymes;
char*definition;
};

struct dico {
mot **tab;
int taille_max;
int nb_mots;
};

char* saisir_chaine()
{
char*s , buffer[1024];
int x;

cin.getline(buffer,1024);
x=strlen(buffer)+1;
s=new char[x];
strcpy(s,buffer);

return s;
}

void afficher_mot(mot *m)
{
cout<<"Mot : "<<m->tab<<endl<<endl;
cout<<"Définition : "<<endl<<m->definition<<endl<<endl;


cout<<"Synonymes : "<<endl<<m->synonymes[0];
for(int i=1;i<m->nb_synonymes;i++)
cout<<", "<<m->synonymes[i];

cout<<"."<<endl<<endl;
}

mot* saisir_mot()
{
mot *m;

cout<<"Veuillez donner votre mot :";
m->tab=saisir_chaine();

cout<<"Donnez votre definition :";
m->definition=saisir_chaine();
do
{
cout<<"Donner le nombre de synonymes"<<endl;
cin>>m->nb_synonymes;

cout<<"Donnez le nombre max de synonymes :"<<endl;
cin>>m->nb_max_synonymes;

m->synonymes = new char*[m->nb_synonymes];

if(m->nb_synonymes>m->nb_max_synonymes)
cout<<"Erreur ressaisissez"<<endl<<endl;

}
while(m->nb_synonymes > m->nb_max_synonymes);

for (int i=0 ;i<m->nb_synonymes ; i++)
{
cout<<"Donnez le synonyme no "<<i+1<<" : ";
fflush(stdin);
m->synonymes[i]=saisir_chaine();
}

return m; <--- ce retour et peu être faux ?

}

dico* remplir_dico()
{
dico* d;

cout<<"Donnez la taille du dictionnaire : ";
cin>>d->taille_max;

d->tab = new mot*[d->taille_max];

cout<<"Combien voulez vous entrer de mots : ";
cin>>d->nb_mots;

for(int i=0 ; i< d->nb_mots ;i++)
{

fflush(stdin);
d->tab[i]=saisir_mot();// c'est cette ligne qui pose problème le dernier pointeur renvoyé se copie dans TOUTES les cases qui le précèdes
}

return d;

}

void afficher_dico(dico* d)
{

cout<<"Taille du dictionnaire : "<<d->taille_max<<endl;


cout<<"Nombre de mots : "<<d->nb_mots<<endl;


for(int i=0;i< d->nb_mots ;i++)
{
cout<<"Mot "<<i+1<<" :"<<endl<<endl;
afficher_mot(d->tab[i]);

}

}



int main()
{
dico *d;

d=remplir_dico();
afficher_dico(d);

return 0;
}
//Merci par avance pour votre aide
mardi 14 février 2012 à 08:17:38 | Re : Problème d allocation dynamique

Renfield

Administrateur CodeS-SourceS
Réponse acceptée !

cout<<"Synonymes : "<<endl<<m->synonymes[0];
for(int i=1;i<m->nb_synonymes;i++)
cout<<", "<<m->synonymes[i];

pas bon, tu pars ici du principe que tu as au moins un synonyme...

faire plutôt :

Code C/C++ :
if (m->nb_synonymes>0) {
    cout<<"Synonymes : "<<endl;
    for(int i=0;i<m->nb_synonymes;i++)
        cout<<", "<<m->synonymes[i];
}


a quoi sert nb_max_synonymes, ca semble assez maladroit et confus (lourd?) a la saisie

où instancies tu ton dico (remplir_dico) ?
idem pour mot dans saisir_mot...

j'ai fait le test, cela fonctionne bien..

Code C/C++ :
#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

struct mot {
	char*tab;
	int nb_synonymes;
	char**synonymes;
	char*definition;
};

struct dico {
	mot **tab;
	int taille_max;
	int nb_mots;
};

char* saisir_chaine() {
	char*s , buffer[1024];
	int x;

	cin.getline(buffer,1024);
	x=strlen(buffer)+1;
	s=new char[x];
	strcpy(s,buffer);

	return s;
}

void afficher_mot(mot *m) {
	cout<<"Mot : "<<m->tab<<endl<<endl;
	cout<<"Définition : "<<endl<<m->definition<<endl<<endl;

	if (m->nb_synonymes>0) {
		cout<<"Synonymes : "<<endl<<m->synonymes[0];
		for(int i=1;i<m->nb_synonymes;i++)
			cout<<", "<<m->synonymes[i];
	}

	cout<<"."<<endl<<endl;
}

mot* saisir_mot() {
    mot *m = new mot;

	cout<<"Veuillez donner votre mot :";
	m->tab=saisir_chaine();

	cout<<"Donnez votre definition :";
	m->definition=saisir_chaine();

	cout<<"Donner le nombre de synonymes"<<endl;
	cin>>m->nb_synonymes;

	m->synonymes = new char*[m->nb_synonymes];

	for (int i=0 ;i<m->nb_synonymes ; i++) 	{
		cout<<"Donnez le synonyme no "<<i+1<<" : ";
		fflush(stdin);
		m->synonymes[i]=saisir_chaine();
	}

	return m;
}

dico*  remplir_dico() {
    dico* d = new dico;

    cout<<"Donnez la taille du dictionnaire : ";
    cin>>d->taille_max;

    d->tab = new mot*[d->taille_max];

    cout<<"Combien voulez vous entrer de mots : ";
    cin>>d->nb_mots;

    for(int i=0 ; i< d->nb_mots ;i++) {
        fflush(stdin);
        d->tab[i]=saisir_mot();
    }

    return d;
}

void  afficher_dico(dico* d) {
    cout<<"Taille du dictionnaire : "<<d->taille_max<<endl;
    cout<<"Nombre de mots : "<<d->nb_mots<<endl;

    for(int i=0;i< d->nb_mots ;i++) {
        cout<<"Mot "<<i+1<<" :"<<endl<<endl;
        afficher_mot(d->tab[i]);
    }
}

/**mot cherche_mot(dico* d, mot &mot )
{
    mot *m;

    for(i=0;i<d->nb_mots;i++)
    {
        if( )
			return m;

    }

}
*/


int main(int argc, char** argv) {
    dico *d;

    d=remplir_dico();
    afficher_dico(d);

	getchar();
    return 0;
}


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
mardi 14 février 2012 à 08:20:28 | Re : Problème d allocation dynamique

Renfield

Administrateur CodeS-SourceS
Réponse acceptée !

enfin, tu noteras que j'ai ajouté
dico* d = new dico;
et
mot* m = new mot;

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
mardi 14 février 2012 à 10:45:11 | Re : Problème d allocation dynamique

Beqtb0x

Mais bien sur je n'avais pas allouer l'espace pour le mot et le dictionnaire merci beaucoup pour votre aide surtout avec une tel rapidité je reviendrais =).

PS : le nombre max est a mettre (énoncé de l'exercice) bien que je suis d'avis qu il ne sert pas a grand chose.

Bonne continuation,


Cette discussion est classée dans : int, mot, char, nb, synonymes


Répondre à ce message

Sujets en rapport avec ce message

Fatal signal: Segmentation Fault (SDL Parachute Deployed) [ par broks ] Je ne comprends vraiment pas pourkoa ca ne marche pas...C'est surement un probleme au niveau de la fonction saisi puisque je plante lorsque je dois sa Hachage fermé problème de lecture [ par mcflysupersonic ] Bonjour je suis nouveau sur le forum est ceci est ma première question donc j'espère que je ne me suis pas trompé d'endroit pour poster.Voilà j'ai un Concaténation int et Cstring [ par maghella ] Salut!Je voudrais concanténer un chiffre et une lettre.Ex: mot="A";Nb=1;mot est de type CString et nb de type int.Je voudrais ke ça donne dans mot: A1 Probleme dans mon programme password [ par Jarod1980 ] Salut tout le monde,Voilà j'ai un problème dans mon programme de password. Je m'explique: J'ai développé en premier lieu un programme où l'utilisateur Probleme dans mon prog password dans la gestion ' * ' [ par Jarod1980 ] Salut,Voila j'ai développé un programme de password qui récupère le password crypté dans un fichier et le compare au password rentré par l'utilisateur addition en binaire [ par jejedi ] bonsoir , je dois faire un petit prog qui additione 2 nombres binaire. Le probleme c' est que mes 2 nombres étant des chaines de caractére ca me renv plantage inexpliqué [ par graall ] bonjour, j'ai un problème avec ce code :     getch();     FILE *pHtml;     int nb_char = 0;     bool sortie = false; Pendu en C [ par the_kaiser ] Voila je suis débutant en C (en programmation tous cours d'ailleurs puisque le C est le premier language que je teste) et je tente de faire un pendu. Probleme avec qsort [ par Noxk ] bonjour, voila j'ai un probleme avec qsort j'esssaie de faire un tri sur un tableau de structure mais j'obtiens une erreur d'acces violation, apparemm Probleme avec mon algo et les structures [ par masterix ] Bonjour à tous,Voilà mon petit soucis je vient de commencer les structures j'ai beau chercher dans mes cours je ne voit pas où se trouve mon problème,


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales