Nous sommes actuellement le 29 Juin 2026, 06:00

Le fuseau horaire est UTC-5 heures [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 8 message(s) ] 
Auteur Message
MessagePublié: 14 Nov 2002, 13:33 
Hors-ligne
Répond à tout!
Répond à tout!

Inscription : 10 Jan 2002, 14:09
Message(s) : 2386
Localisation : Verdun
Bonjour, je veux faire un programme qui transfert un fichier de création de table nucleus vers un fichier de chargement.

Bref, je charge un array a deux dimention, l'une pour la le # de ligne, l'autre pour le data.

Par la suite je passe ca dans un boucle pour trouvé mon nom de table a l'aide d'un objet créé dans un class(que j'ai fait), le probleme c'est que je set le nombre de ligne total dans mon fichier d'input, mais lorsque j'appele l'objet de la classe, il bousille les données mémoire de mon pointeur->int. Donc si je n'utilise pas de pointeur, mon int ligne = 101, va devenir = 123245885 apres l'appele de la class. si c'est un pointeur, j'ai un "Segmentation fault (core dumped)".

voila :

Code :
unsigned int* ligne = new unsigned int;
unsigned int* lettre = new unsigned int;
*ligne = 0;
*lettre = 0;

..... // enregistre les données dans le array (fonctionne #1)
// ma classe, création d'objet
c_ddl2ndl ndl;

for (int i = 1; i <= 50; i++)
{
   cout << "i : " << i << endl;
   cout << "*ligne : " << *ligne << endl;
   ndl.settablename(entredata[i-1]);
   cout << "\n";
}

delete mes pointeurs;


voici la l'objet :
Code :
void c_ddl2ndl::settablename(const char entredata_tmp[])
{
   int* length = new int;
   *length = strlen(entredata_tmp);
   for(int y = 0; y < *length; y++)
   {
      tablename[y] = toupper(entredata_tmp[y]);
      tablename[y+1] = '\0';
   }
   delete length;
}


évidement l'objet n'est pas complet, je veux corrigé ce probleme avant de poursuivre.


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 14 Nov 2002, 14:00 
Hors-ligne
Modérateur
Modérateur
Avatar de l’utilisateur

Inscription : 07 Jan 2002, 15:10
Message(s) : 3551
Localisation : Beauport, Québec
Où est-ce que tu déclare ton tablename[]? Comment l'as-tu déclaré?

Ton problème semble être au niveau de tes déclarations.

Mon guess serait que tu déclare une certaine grosseur de tableau mais que tu y écris en débordement. Le y de ton for doit devenir plus grand que la grosseur de ton tableau tablename[].

_________________
Procyon,
Modérateur de la section Trouvailles


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 14 Nov 2002, 14:03 
Hors-ligne
Répond à tout!
Répond à tout!

Inscription : 10 Jan 2002, 14:09
Message(s) : 2386
Localisation : Verdun
je déclare mon array comme cela :

Code :
char entredata [200][100];


ma ligne la plus longue dans le fichier est de 65.


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 14 Nov 2002, 14:48 
Hors-ligne
Modérateur
Modérateur
Avatar de l’utilisateur

Inscription : 07 Jan 2002, 15:10
Message(s) : 3551
Localisation : Beauport, Québec
sanctus a écrit:
je déclare mon array comme cela :

Code :
char entredata [200][100];


ma ligne la plus longue dans le fichier est de 65.


Je parlais de tablename, pas de entredata :)

_________________
Procyon,
Modérateur de la section Trouvailles


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 14 Nov 2002, 14:52 
Hors-ligne
Répond à tout!
Répond à tout!

Inscription : 10 Jan 2002, 14:09
Message(s) : 2386
Localisation : Verdun
ok, oups,,

regardez, dans ma déclaration de l'objet
Code :
const char entredata_tmp[]


je ne déclare pas de longueur pour que le compilateur laisse la place nécessaire, mais effectivement c'est peut-etre le probleme, je vais lui spécifier la place identique au mon entredata.


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 14 Nov 2002, 15:21 
Hors-ligne
Modérateur
Modérateur
Avatar de l’utilisateur

Inscription : 07 Jan 2002, 15:10
Message(s) : 3551
Localisation : Beauport, Québec
sanctus a écrit:
ok, oups,,

regardez, dans ma déclaration de l'objet
Code :
const char entredata_tmp[]


je ne déclare pas de longueur pour que le compilateur laisse la place nécessaire, mais effectivement c'est peut-etre le probleme, je vais lui spécifier la place identique au mon entredata.


À moins d'avoir un compilateur que je n'ai jamais vu, ceux que avec lesquels j'ai travaillé ne donnent pas de grosseur par défaut! En déclarant ainsi, vous avez un pointeur sans case mémoire subséquente réservée. Identique à

Code :
const char *entredata_tmp;


Soit vous dimensionnez en déclarant, sois vous le faites dynamiquement, mais le compilateur ne le fera pas à votre place ça c'est certain!

Je ne me souviens plus de la fonction exacte pour redimentionner votre pointeur, mais il faut le faire.

_________________
Procyon,
Modérateur de la section Trouvailles


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 14 Nov 2002, 15:33 
Hors-ligne
Répond à tout!
Répond à tout!

Inscription : 10 Jan 2002, 14:09
Message(s) : 2386
Localisation : Verdun
ok, j'ai trouvé le probleme,

je déclarais la valeur dans l'entete de la fonction(objet), mais pas dans la section private de ma class.
J'ai du oublie de lire une page quelque par ;-)

Merci bcp


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 14 Nov 2002, 15:36 
Hors-ligne
Modérateur
Modérateur
Avatar de l’utilisateur

Inscription : 07 Jan 2002, 15:10
Message(s) : 3551
Localisation : Beauport, Québec
Hein?

En tout cas..

Lecture intéressante:

http://msdn.microsoft.com/library/defau ... rators.asp

Si tu ne dimentionne pas ton tableau (en laissant le compilateur le faire comme tu dis) tu aura assurément des fuites mémoire et ça c'est très mauvais! Le cauchemard des programmeurs C/C++ parce que c'est pas facile à détecter.

_________________
Procyon,
Modérateur de la section Trouvailles


Haut
 Profil  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 8 message(s) ] 

Le fuseau horaire est UTC-5 heures [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Recherche de:
Aller vers :  
cron
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en françaisHébergement de site