(Exception de première chance à 0x6009984f (msvcr90d.dll) dans T

Résolu
SMMM@ Messages postés 13 Date d'inscription lundi 4 janvier 2016 Statut Membre Dernière intervention 1 février 2016 - 4 janv. 2016 à 13:29
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 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.)

5 réponses

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
Modifié par nagashima le 5/01/2016 à 16:54
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
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
5 janv. 2016 à 17:03
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
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
5 janv. 2016 à 17:04
(je rajouterai aussi que je fais plus de c++ depuis un bail mais bon x])
0
SMMM@ Messages postés 13 Date d'inscription lundi 4 janvier 2016 Statut Membre Dernière intervention 1 février 2016
5 janv. 2016 à 19:55
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??!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
6 janv. 2016 à 08:38
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
0
Rejoignez-nous