C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

strange problem

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Flzw
Guest





PostPosted: Sun Aug 29, 2004 2:32 pm    Post subject: strange problem Reply with quote



Ca fait pas longtemps que j'utilise les containers da la libraire standard
mais sur ma derniere app j'ai pas eu de probleme

La je commence un autre projet et j'ai eu un probleme avec std::string,
quand je depassais une chaine de 16 caracteres ( a priori c'est la taille
allouée par defaut ) ca lancait un bad_alloc automatiquement

j'ai essayé reserve(), pareil, je recupere un bad_alloc sur le reserve

J'ai ensuite essayé reserve() sur un vector, et, meme erreur...

Je ne sais pas du tout ce qui fait ca et ca fait un moment je m'enerve la
dessus, si quelqu'un aurait une petite idée....


Back to top
drkm
Guest





PostPosted: Sun Aug 29, 2004 8:43 pm    Post subject: Re: strange problem Reply with quote



"Flzw" <fl0wnz (AT) wanadoo (DOT) fr> writes:

[...]

Quote:
Je ne sais pas du tout ce qui fait ca et ca fait un moment je
m'enerve la dessus, si quelqu'un aurait une petite idée....

Étrange. Pourrais-tu poster un bout de code minimal reproduisant le
problème ?

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Back to top
Flzw
Guest





PostPosted: Sun Aug 29, 2004 8:49 pm    Post subject: Re: strange problem Reply with quote




Quote:
Étrange. Pourrais-tu poster un bout de code minimal reproduisant le
problème ?

Merci mais en fait j'ai finalement compris.

Le probleme venait j'utilisais une classe que j'ai codé dans une DLL et en
fait j'avais décidé de declarer la classe avec juste les fonctions exportées
dans le header de mon app (et donc sans les variables)

Ca marchait a la compilation mais comme les 2 classes etaient pas déclarées
pareil ca corrompait la stack et faisait foirer tout les appels suivant a
new etc.

Je pensais que l'on pouvait declarer la classe avec juste les methodes
publiques et que le compilateur se debrouillerait ( et ca allait dans le
sens de ce que dit Bjarne dans son livre) mais comme la representation en
memoire et forcément pas la meme...

bref je sais pas si je suis tres claire, mais en rajoutant les variables
membres de ma classe dans le header pour mon app, ca marche nickel.



Back to top
drkm
Guest





PostPosted: Sun Aug 29, 2004 9:22 pm    Post subject: Re: strange problem Reply with quote

"Flzw" <fl0wnz (AT) wanadoo (DOT) fr> writes:

Quote:
Le probleme venait j'utilisais une classe que j'ai codé dans une DLL
et en fait j'avais décidé de declarer la classe avec juste les
fonctions exportées dans le header de mon app (et donc sans les
variables)

Ca marchait a la compilation mais comme les 2 classes etaient pas
déclarées pareil ca corrompait la stack et faisait foirer tout les
appels suivant a new etc.

Ca s'appelle une violation de l'ODR.

Quote:
Je pensais que l'on pouvait declarer la classe avec juste les
methodes publiques et que le compilateur se debrouillerait

Non.

Quote:
( et ca
allait dans le sens de ce que dit Bjarne dans son livre) mais comme
la representation en memoire et forcément pas la meme...

bref je sais pas si je suis tres claire, mais en rajoutant les
variables membres de ma classe dans le header pour mon app, ca
marche nickel.

Si je comprend bien, ta classe est définie dans deux fichiers
différents ? C'est très déroutant, et très dangereux. Comme le
montre ton exemple, si j'ai bien compris.

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html

Back to top
Flzw
Guest





PostPosted: Sun Aug 29, 2004 11:41 pm    Post subject: Re: strange problem Reply with quote


Quote:
Si je comprend bien, ta classe est définie dans deux fichiers
différents ? C'est très déroutant, et très dangereux. Comme le
montre ton exemple, si j'ai bien compris.

Ben je suis bien obligé car je dois rajouter l'attribut
__declspec(dllexport)

dans les declarations des fonctions membres de la classe dans la dll.

A moins qu'il y est une autre facon de faire ?



Back to top
Loïc Joly
Guest





PostPosted: Mon Aug 30, 2004 12:10 am    Post subject: Re: strange problem Reply with quote

Flzw wrote:
Quote:
Si je comprend bien, ta classe est définie dans deux fichiers
différents ? C'est très déroutant, et très dangereux. Comme le
montre ton exemple, si j'ai bien compris.


Ben je suis bien obligé car je dois rajouter l'attribut
__declspec(dllexport)

dans les declarations des fonctions membres de la classe dans la dll.

A moins qu'il y est une autre facon de faire ?

La manière "classique" est de faire un truc du genre

#ifdef JE_COMPILE_LA_DLL
#define DECLARE_DLL __declspec(dllexport)
#else
#define DECLARE_DLL __declspec(dllimport)
#endif

C'est pas très joli, une macro, mais j'ai pas grand chose de mieux à
proposer.
Autre avantage : Le jour où on compile sous Linux, il suffit de définir
cette macro à rien du tout.

--
Loïc

Back to top
Serge Paccalin
Guest





PostPosted: Mon Aug 30, 2004 8:29 am    Post subject: Re: strange problem Reply with quote

Le lundi 30 août 2004 à 01:41, Flzw a écrit dans fr.comp.lang.c++ :

Quote:
Si je comprend bien, ta classe est définie dans deux fichiers
différents ? C'est très déroutant, et très dangereux. Comme le
montre ton exemple, si j'ai bien compris.

Ben je suis bien obligé car je dois rajouter l'attribut
__declspec(dllexport)

dans les declarations des fonctions membres de la classe dans la dll.

A moins qu'il y est une autre facon de faire ?

Avec une macro qui changera de valeur selon le projet qui inclut le
fichier .h :

///////////////////////////////////////////
// Machin.h

#if ! defined(DECL_MACHIN_EXPORT)
#define DECL_MACHIN_EXPORT __declspec(dllimport)
#endif

class DECL_MACHIN_EXPORT Machin
{
// ...
};

///////////////////////////////////////////
// Machin.cpp

#define DECL_MACHIN_EXPORT __declspec(dllexport)
#include "Machin.h"

Machin::Machin()
{
//...
}

//...

///////////////////////////////////////////
// Autre .cpp "client"

#include "Machin.h"

Machin unMachin;

//...


Par ailleurs, si tu veux masquer tes données membres, documente-toi sur
le "pimpl idiom", tu m'en diras des nouvelles.

--
___________ 2004-08-30 10:24:26
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.