(Exception de première chance à 0x6009984f (msvcr90d.dll) dans T [Résolu]

SMMM@ 13 Messages postés lundi 4 janvier 2016Date d'inscription 1 février 2016 Dernière intervention - 4 janv. 2016 à 13:29 - Dernière réponse : nagaD.scar 4148 Messages postés samedi 8 septembre 2007Date d'inscription 13 décembre 2017 Dernière intervention
- 6 janv. 2016 à 08:38
Bonjour,
je suis en train d'écrire un classe qui gére un tableau de liste chainé j'ai crée la fonction add(char *element) qui ajoute une chaine au tableau
void LinkedList::add(char *element){
if(this->Size==0){
this->Tab=new char*[1];
this->Tab[0]=element;
this->Size=this->Size+1;
}
else{
char **t=NULL;
t=new char *[this->Size];
for(int i=0;i<(this->Size);i++){
t[i]=this->Tab[i];
}
this->Tab=new char* [this->Size+1];
for(int i=0;i<(this->Size)+1;i++){
this->Tab[i]=t[i];
}
this->Tab[(this->Size)+1]=element;
this->Size=this->Size+1;

}
}
mais ça donne un problémme l'hors de l'éxécution je ne sais d'ou il vint!!(Exception de première chance à 0x6009984f (msvcr90d.dll) dans Tp1.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xfdfdfdfd.)
Afficher la suite 

5 réponses

Répondre au sujet
nagaD.scar 4148 Messages postés samedi 8 septembre 2007Date d'inscription 13 décembre 2017 Dernière intervention - Modifié par nagashima le 5/01/2016 à 16:54
0
Utile
Salut,
Ton allocation est pas bonne, mais il y a aussi des choses que je suis pas sûr de saisir, d'autres incohérentes.

Premiere question, ton "element" est un pointeur vers un caractère ou une chaine de caractères ?

Ensuite, là tu fais du c++ et non du c mais bref ^^

naga
Commenter la réponse de nagaD.scar
nagaD.scar 4148 Messages postés samedi 8 septembre 2007Date d'inscription 13 décembre 2017 Dernière intervention - 5 janv. 2016 à 17:03
0
Utile
Si l'idée est d'avoir un tableau de chaines de caractères, tu peux tester :


public void LinkedList::add(char* element) 
{
	int elemSize = strlen(element);
	char **tabCPY = new char*[Size];
	//On copie la table 
	for(int i=0; i < iSize ; i++)
	{
		tabCPY[i] = new char[strlen(this->Tab[i])];
		strcpy(tabCPY[i],this->Tab[i]);
	}
	//On libere la table
	for(int i=0; i < iSize ; i++)
		delete this->Tab[i];
	delete this->Tab;
	
	//On la remonte avec une case en plus
	this->Size++;
	this->Tab = new char*[Size];
	for(int i=0; i < iSize ; i++)
	{
		this->Tab[i] = new char[strlen(tabCPY[i])];
		strcpy(this->Tab[i],tabCPY[i]);
	}
	//et on ajoute l element
	this->Tab[this->Size] = new char*[elemSize];
	strcpy(this->Tab[this->Size - 1],element);
	//et on libere notre table de copy
	for(int i=0; i < iSize ; i++)
		delete tabCPY[i];
	delete tabCPY;
}


J ai pas de compilateur sous la main mais tu peux tester ca. Si tu as une erreur (ou pas) redis moi

naga
Commenter la réponse de nagaD.scar
nagaD.scar 4148 Messages postés samedi 8 septembre 2007Date d'inscription 13 décembre 2017 Dernière intervention - 5 janv. 2016 à 17:04
0
Utile
(je rajouterai aussi que je fais plus de c++ depuis un bail mais bon x])
Commenter la réponse de nagaD.scar
SMMM@ 13 Messages postés lundi 4 janvier 2016Date d'inscription 1 février 2016 Dernière intervention - 5 janv. 2016 à 19:55
0
Utile
premiérement merci beaucoup
non ce n'ai pas l'idée j'ai pas bien comprie l'énoncé de l'exercice mais maintenant je l'ai comprie l'idé est de faire une classe LinkedList avec implémentation sous forme de liste chainé avec des élément de type String(String est un classe que j'ai déja écrit dans un autre exercice

class String
{
private:char *v;
public:
String(void);//constructeur sans paramétre
String(char *c);//constructeur avec un paramétre de type char*
String(int s);//constructeur avec un paramétre de type int
String(char c);//constructeur avec un paramétre de type char
String(double f);//constructeur avec un paramétre de type double
char * ftoa(double f);// fonction que j'ai utiliser dans String(double f) qui fait la conversion de double e string
int length();//retourne la taille de la chaine
char get(int i);//retourne le caractére de l'indice i
void set(int i,char c);//remplace le caractére numéro i par la caractére c
void set(char *string);//remplace lecontenu de la chaine par la chaine string
void set(int s);//remplace le contenue de la chaine par l'entier s
void set(double d);//remplace le contenue de la chaine par d
void set(char c);//remplace le contenue de la chaine par le caractére c
void append(char *string);//concaténation de string
void append(int i);//surcharge de append avec comme paramétre un entier
void append(double d);//surcharge de append avec comme paramétre un reel
void append(char c);//surcharge de append avec un paramétre de type char
void toUpper(void);//convertir en majuscule
void toLower(); //convertir en minuscule
void insert(int i, char *string);//insertion d’une chaîne « string » à la position i
void insert(int i, String string);
void insert(int i,int t);//inserer l'entier t à la position i
void insert(int i,double d);//inserer un reel d à la position i
void insert(int i,char c);//inserer un caractére c à la position i
String substring(int i, int j); // extrait la sous chaîne située entre i et j
int pos(char *string);//cherche l'existance d'une chaine dans une autre
int pos(String string);//surcharge de pos
void print(void);//pour l'affichage
int intValue();//retourn la valeur de la chaine sous forme d'un entier si c'est un entier
String operator + (String s);
void operator = (String s);
char *getV();//retoyrne le valeur de v pour l'utiliser dans l'exercice 2
~String(void);//destructeur sans paramétre
}
j'ai essayée de début comme ça
classe LinkedList{
private:
String v;
LinkedList *next;
}
mais ça me donne un probléme au niveau de compilayion que je ne peut pas déclaré next de ce type si vous pouvez m'aidez??!!
Commenter la réponse de SMMM@
nagaD.scar 4148 Messages postés samedi 8 septembre 2007Date d'inscription 13 décembre 2017 Dernière intervention - 6 janv. 2016 à 08:38
0
Utile
Salut,
Utilise les balises de code pour ton code, ca sera plus lisible.

Mais du coup ca ne change pas grand chose à mon code, simplement changer le type de tableau (string*) et d'entrée(string), et retirer les allocations (qui sont normalement implicites avec le type string). Tu peux regarder ici:

http://www.tutorialspoint.com/cplusplus/cpp_strings.htm

pour t'aiguiller.

naga
Commenter la réponse de nagaD.scar

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.