#0 -1 » [Résolu] C++ erreur d'édition de lien » Le 03/03/2013, à 19:12
- no_spleen
- Réponses : 5
Bonjour à tous,
J'ai débuté la programmation d'un petit module de jeu d'échecs, j'en suis à la représentation de l'échiquier et j'ai une erreur à l'édition de lien que je n'arrive pas à résoudre.
Voici comment j'ai structuré la chose :
- Une classe square : chaque case contient dans ses membres son numéro de case et des pointeurs vers les 8 cases adjacentes
- Une classe board : rassemble toutes les cases de l'échiquier dans un std::vector.
Je souhaite ajouter une fonction board::get_iterator qui retourne un iterateur sur le vecteur de cases, et c'est à l'édition de lien de cette fonction que j'ai une erreur.
Voici mes fichiers
iterator.h
#ifndef ITERATOR_H
#define ITERATOR_H
#include <vector>
template <class Item>
class Iterator {
public :
virtual void First() = 0;
virtual void Next() = 0;
virtual bool IsDone() = 0;
virtual Item CurrentItem() = 0;
protected:
Iterator();
};
template <class Item>
class VectorIterator : public Iterator <Item>{
public :
VectorIterator(std::vector<Item>* aVec);
virtual void First();
virtual void Next();
virtual bool IsDone();
virtual Item CurrentItem();
protected:
std::vector<Item> *_vec;
int _current;
};
#endifiterator.cpp
#include "iterator.h"
template < class Item >
VectorIterator<Item>::VectorIterator(std::vector<Item>* aVec)
{
_vec = aVec;
_current=0;
};
template < class Item >
void VectorIterator<Item>::First()
{
_current=0;
};
template < class Item >
void VectorIterator<Item>::Next()
{
_current++;
};
template < class Item >
bool VectorIterator<Item>::IsDone()
{
return _current >= _vec->size();
};
template < class Item >
Item VectorIterator<Item>::CurrentItem()
{
return (*_vec)[_current];
};square.h
#ifndef SQUARE_H
#define SQUARE_H
class square
{
private :
static int nb_squares;
int num;
square* nxt_0;
square* nxt_1;
square* nxt_2;
square* nxt_3;
square* nxt_4;
square* nxt_5;
square* nxt_6;
square* nxt_7;
public :
square();
~square();
void set_next(int , square*);
square* get_next(int);
inline int get_num(){return num;};
};
#endifsquare.cpp
#include <iostream>
#include "square.h"
int square::nb_squares = 0;
square::square()
{
nb_squares++;
num = nb_squares;
nxt_0 =0;
nxt_1 =0;
nxt_2 =0;
nxt_3 =0;
nxt_4 =0;
nxt_5 =0;
nxt_6 =0;
nxt_7 =0;
};
square::~square()
{
delete nxt_0;
delete nxt_1;
delete nxt_2;
delete nxt_3;
delete nxt_4;
delete nxt_5;
delete nxt_6;
delete nxt_7;
};
void square::set_next(int nxt , square* sq)
{
switch (nxt)
{
case 0 :
nxt_0 = sq;
case 1 :
nxt_1 = sq;
case 2 :
nxt_2 = sq;
case 3 :
nxt_3 = sq;
case 4 :
nxt_4 = sq;
case 5 :
nxt_5 = sq;
case 6 :
nxt_6 = sq;
case 7 :
nxt_7 = sq;
}
};
square* square::get_next (int nxt)
{
switch (nxt)
{
case 0 :
return nxt_0 ;
case 1 :
return nxt_1 ;
case 2 :
return nxt_2 ;
case 3 :
return nxt_3 ;
case 4 :
return nxt_4 ;
case 5 :
return nxt_5 ;
case 6 :
return nxt_6 ;
case 7 :
return nxt_7 ;
}
return 0;
};board.h
#ifndef BOARD_H
#define BOARD_H
#include <vector>
#include "square.h"
#include "iterator.h"
class board
{
private :
int nb_row , nb_col;
std::vector<square*> squares;
public :
board(int nb_row , int nb_col);
square* get_square(int num);
Iterator<square*>* get_iterator();
};
#endifboard.cpp
#include "board.h"
#include <iostream>
board::board(int _nb_row , int _nb_col)
{
nb_row = _nb_row;
nb_col = _nb_col;
for (int i=0 ; i<nb_row ; i++)
{
for (int j=0 ; j<nb_col ; j++)
{
squares.push_back(new square);
}
}
int nb_squares = nb_row * nb_col;
for (int i=0 ; i < nb_squares; i++)
{
int row = i / nb_col + 1;
int col = i%nb_col +1;
// rangée du dessus
if ( row < nb_row)
{
squares[i]->set_next(1,get_square(i+nb_col));
if (col < nb_col)
{
squares[i]->set_next(2,get_square(i+nb_col+1));
}
if (col != 1)
{
squares[i]->set_next(0,get_square(i+nb_col-1));
}
}
// case de droite
if (col < nb_col)
squares[i]->set_next(4,get_square(i+1));
// case de gauche
if (col != 1)
squares[i]->set_next(3,get_square(i-1));
// rangée du bas
if (row > 1)
{
squares[i]->set_next(6,get_square(i-nb_col));
if (col < nb_col)
squares[i]->set_next(7,get_square(i-nb_col+1));
if (col != 1)
squares[i]->set_next(5,get_square(i-nb_col-1));
}
}
};
square* board::get_square(int num)
{
if (num > nb_row*nb_col || num < 0)
{
return 0;
}
else
{
return squares[num];
}
};
Iterator<square*>* board::get_iterator()
{
return new VectorIterator<square*>(&squares);
};Et quand je veux compiler, j'ai cette erreur
board.o: dans la fonction « board::get_iterator() »:
board.cpp:(.text+0x41c): référence indéfinie vers « VectorIterator<square*>::VectorIterator(std::vector<square*, std::allocator<square*> >*) »
collect2: erreur: ld a retourné 1 code d'état d'exécution
Est-ce que vous voyez l'erreur ?
Merci de votre aide,
#1 Re : -1 » [Résolu] C++ erreur d'édition de lien » Le 07/03/2013, à 20:03
- no_spleen
- Réponses : 5
Je n'ai toujours pas trouvé la solution, donc si une personne à une piste :-)
#2 Re : -1 » [Résolu] C++ erreur d'édition de lien » Le 07/03/2013, à 21:20
- no_spleen
- Réponses : 5
Bon, il a suffit que je valide le message précédent pour que l'erreur me saute aux yeux. Iterator est une classe template, et j'avais placé la définition et l'implémentation dans deux fichiers différents...
Merci à ceux qui ont réfléchi au problème !
#3 Re : -1 » [Résolu] C++ erreur d'édition de lien » Le 07/03/2013, à 22:31
- no_spleen
- Réponses : 5
Bonjour pingouinux,
Le contenu du fichier iterator.cpp doit se trouver dans le fichier iterator.h (il n'y a donc pas de fichier iterator.cpp). Ceci car l'implémentation des fonctions templates doit se trouver dans le même fichier que leurs déclarations.
Je ne peux malheureusement pas te donner plus de détails car je ne suis pas non plus un expert en C++. Ce petit projet est justement un moyen de m'y remettre !.
Dans les versions des sources de mon premier message, j'ai aussi oublié les instructions break dans le switch de la fonction square::set_next.
J'espère avoir été plus clair.
Bàt,
#4 Re : -1 » [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs » Le 15/08/2012, à 14:10
- no_spleen
- Réponses : 33
Bonjour,
une petite version en awk pour varier.
split_titles.awk
{
for (i=1;i<=NF;i++)
{
if (!(length($i) in taille))
{
taille[length($i)]=$i
place[$i]=i
}
}
n = asorti(taille,n_ordre)
for (i=0;i<nb_max;i++)
{
word = taille[n_ordre[n-i]]
unsorted[place[word]]=word
}
m = asorti(unsorted,m_ordre)
sorted = ""
for (i=1;i<=m;i++)
{
sorted=(i==1)?unsorted[m_ordre[i]]:sorted"_"unsorted[m_ordre[i]]
}
print sorted
delete taille
delete place
delete n_ordre
delete m_ordre
delete unsorted
}et pour le lancer
gawk -f split_titles.awk -v nb_max=2 test_file.txt#5 Re : -1 » [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs » Le 15/08/2012, à 17:22
- no_spleen
- Réponses : 33
Argh, en effet. J'avais oublié que les indices en awk sont toujours des strings. Donc 11 < 2.
On peux régler le problème en rajoutant un "z" devant la taille du mot si celui-ci fait plus de 9 lettres (je poste qu'il n'y a pas de mots de plus de 99 lettres...)
{
for (i=1;i<=NF;i++)
{
longueur = (length(length($i))>1)?"z" length($i):length($i)
if (!(longueur in taille))
{
taille[longueur]=$i
place[$i]=i
}
}
n = asorti(taille,n_ordre)
for (i=0;i<nb_max;i++)
{
word = taille[n_ordre[n-i]]
unsorted[place[word]]=word
}
m = asorti(unsorted,m_ordre)
sorted = ""
for (i=1;i<=m;i++)
sorted=(i==1)?unsorted[m_ordre[i]]:sorted"_"unsorted[m_ordre[i]];
print sorted
delete taille
delete place
delete n_ordre
delete m_ordre
delete unsorted
}#6 Re : -1 » [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs » Le 15/08/2012, à 18:55
- no_spleen
- Réponses : 33
pingouinux, tu es doué pour appuyer la où cela fait mal ;-)
Je suis curieux de savoir où se situe awk par rapport au shell ou au python au niveau performance.
{
for (i=1;i<=NF;i++)
{
longueur = (length(length($i))>1)?"z" length($i):length($i)
emplacement = (length(i)>1)?"z"i:i
if (!(longueur in taille))
{
taille[longueur]=$i
place[$i]=emplacement
}
}
n = asorti(taille,n_ordre)
for (i=0;i<nb_max;i++)
{
word = taille[n_ordre[n-i]]
unsorted[place[word]]=word
}
m = asorti(unsorted,m_ordre)
sorted = ""
for (i=1;i<=m;i++)
sorted=(i==1)?unsorted[m_ordre[i]]:sorted"_"unsorted[m_ordre[i]];
print sorted
delete taille
delete place
delete n_ordre
delete m_ordre
delete unsorted
}#7 Re : -1 » [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs » Le 15/08/2012, à 19:34
- no_spleen
- Réponses : 33
@pinguinux
La règle était que si plusieurs mots ont la même taille, on prend le premier. Ici phrase à la même taille que tester.
#8 Re : -1 » [RESOLU] [sed] Extraire texte contenu entre parenthèses » Le 07/07/2012, à 09:13
- no_spleen
- Réponses : 17
Donner la réponse, c'est bien. Expliquer pourquoi la première solution ne fonctionne pas, c'est mieux !
Jedineofr, il faut savoir que l'opérateur * est "greedy". C'est à dire qua quand tu fais .* il va prendre toute la ligne puis revenir progressivement en arrière jusqu'à ce que ce qui se trouve après le .* dans le regex soit aussi satisfait.
Donc dans ton cas, il va au fond puis en revenant en arrière il tombe sur les deuxièmes paranthèses.
#9 Re : -1 » [RESOLU] [sed] Extraire texte contenu entre parenthèses » Le 07/07/2012, à 17:37
- no_spleen
- Réponses : 17
@ar barzh paour
sed 's/.*A \(.*\) X.* / \1/'Ne fera tout simplement rien, car tu n'a pas de parenthèses de groupement dans ta regex. Il faut plutôt quelque chose comme
sed 's/.*A \( (.* ) \) X.* / \1/'Cette regex commence par .*, ce qui veux dire "prend le maximum de n'importe quel caractère". Il va donc prendre toute la ligne.
Ensuite, il va regarder si le caractère suivant est bien un A. Ici ce ne sera pas le cas puisque que l'on est en fin de ligne. Il va donc reculer d'un caractère jusqu'à tomber sur un A.
Donc si tu veux le premier A de la ligne et qu'il y en plusieurs, cette regex ne marchera pas car tu auras le dernier de la ligne.
Pour éviter cela, une solution est de remplacer .* par quelque chose comme [^A]*, qui veux dire "prend le plus possible de n'importe quel caractère sauf le A".
Sur certaines implémentations, tu as aussi des opérateurs "non greedy", du genre .*? qui veulent dire "prend le nimimum de n'importe quel caractère". C'est aussi une solution possible au problème.
#10 Re : -1 » Problème pour compiler un document Latex avec Texmaker » Le 16/06/2012, à 09:14
- no_spleen
- Réponses : 9
Bonjour Guy310,
Si tu essayes de compiler ton fichier directement en ligne de commande cela fonctionne ?
pdflatex ton_document.tex#11 Re : -1 » Script random Mac adresse » Le 05/05/2012, à 16:18
- no_spleen
- Réponses : 6
Bonjour,
Pour en revenir au problème initial, l'option -c de [e]?grep ne compte pas le nombre de résultats du regex, mais le nombre de ligne contenant au moins 1 match.
Essaye plutôt
Nombre=$(echo $InterfaceWifi | awk '{x=x+NF}END{print x}')EDIT :
ou plus simple
Nombre=$(echo $InterfaceWifi | wc -w)EDIT2
ou si tu veux être sur de récupérer uniquement des interfaces
Nombre=$(echo $InterfaceWifi | tr ' ' '\n' | grep -c '[wlan|eth][0-9]*')#12 Re : -1 » [C] Probleme concernant l'utilisation de structures » Le 22/05/2011, à 11:00
- no_spleen
- Réponses : 1
Juste une idée,
la déclaration
pion pion;est-elle valide ? Car du coup tu te retrouve avec une variable qui a le même nom qu'une structure. Peut-être qu'alors quand tu fais
pion deplacement2;le compilateur interprète cela comme étant deux objets, et te dit que la déclaration n'est pas valide.
#13 -1 » [résolu][c++] problème de vtable » Le 09/02/2011, à 15:07
- no_spleen
- Réponses : 3
Bonjour à tous,
Je m'essaye aux joyeusetés du c++, et je tombe sur un os. Je crée une classe de base comme ceci :
FEM_BASE.h
template<class T>
class FEM_BASE
{
protected :
GModel *gm;
public :
FEM_BASE (GModel *_gm) : gm(_gm) {};
void numbering(int physical,
int dimOfPhysical,
int icomp,
int iField,
Assembler<T> &assem,
bool isEnriched = false);
void solve(linearSystem<T> &lsys);
PView* getSolution(Assembler<T> &assem,std::string name, int icomp,int ifield,double time);
virtual void setParameters(std::vector<T> par) = 0;
virtual void build(Assembler<T> &lsys, int icomp, int ifield) = 0;
};qui contient donc 2 fonctions virtuelles pures. Je définis les autres dans le fichier FEM_BASE.cpp
#include "FEM_BASE.h"
template<class T> void FEM_BASE<T>::numbering (int dimOfPhysical,
int physical,
int iComp,
int iField,
Assembler<T> &assem,
bool enriched)
{
std::vector<MVertex *> v;
gm->getMeshVerticesForPhysicalGroup(dimOfPhysical,physical,v);
for (unsigned int i=0;i<v.size();i++){
assem.numberVertex (v[i], iComp, iField);
}
}
template<class T> void FEM_BASE<T>::solve (linearSystem<T> &lsys)
{
lsys->systemSolve();
}
template<class T> PView* FEM_BASE<T>::getSolution(Assembler<T> &assem,
std::string name,
int icomp,
int ifield,
double time)
{
std::vector<GEntity*> entities;
gm->getEntities(entities);
std::map<int, std::vector<double> > d;
for(unsigned int i = 0; i < entities.size(); i++){
for(unsigned int j = 0; j < entities[i]->getNumMeshVertices(); j++){
MVertex *v = entities[i]->getMeshVertex(j);
d[v->getNum()].push_back(assem.getDofValue(v,icomp,ifield));
}
}
PView *p = new PView(name,"NodeData",gm,d,time,ifield);
return p;
}Fort de cette belle classe de base, je veux en hériter une, qui défini les deux fonctions virtuelles pures. Je m'y attelle donc en écrivant ce BS_EUROPEAN.h
template<class T>
class BS_European : public FEM_BASE<T>
{
protected :
GModel *gm;
double vol;
double r;
double dt;
public :
BS_European (GModel *_gm) : FEM_BASE<T>(_gm) , gm(_gm) {};
void setParameters(std::vector<T> par);
void build(Assembler<T> &lsys, int icomp, int ifield);
};et je défini ces fameuses fonctions dans BS_EUPEAN.cpp
template<class T> void BS_European<T>::setParameters(std::vector<T> par)
{
vol(par[0]);
r(par[1]);
dt(par[2]);
};
template<class T> void BS_European<T>::build(Assembler<T> &lsys, int icomp, int ifield)
{
// create matrix blocks
Mass_Block<T> mass(gm);
Stiffness_Block<T> stiff(gm);
Mixed_Block<T> mixed(gm);
Source_Block<T> source(gm);
std::vector<GEntity*> entities;
gm->getEntities(entities);
for(unsigned int i = 0; i < entities.size(); i++){
for(unsigned int j = 0; j < entities[i]->getNumMeshVertices(); j++){
MVertex *v = entities[i]->getMeshVertex(j);
double val = 1.0/dt - r;
lsys.parVertex(v,icomp,ifield,val);
}
}
mass.build(lsys,icomp,ifield);
for(unsigned int i = 0; i < entities.size(); i++){
for(unsigned int j = 0; j < entities[i]->getNumMeshVertices(); j++){
MVertex *v = entities[i]->getMeshVertex(j);
double val = -0.5 * vol * vol * v->x() * v->x();
lsys.parVertex(v,icomp,ifield,val);
}
}
stiff.build(lsys,icomp,ifield);
for(unsigned int i = 0; i < entities.size(); i++){
for(unsigned int j = 0; j < entities[i]->getNumMeshVertices(); j++){
MVertex *v = entities[i]->getMeshVertex(j);
double val = r * v->x() ;
lsys.parVertex(v,icomp,ifield,val);
}
}
mixed.build(lsys,icomp,ifield);
for(unsigned int i = 0; i < entities.size(); i++){
for(unsigned int j = 0; j < entities[i]->getNumMeshVertices(); j++){
MVertex *v = entities[i]->getMeshVertex(j);
double val = 1.0 / dt;
lsys.parVertex(v,icomp,ifield,val);
}
}
source.build(lsys,icomp,ifield);
};Une fois tout ceci fait, je veux utiliser ma classe BS_European, et lui appliquer les méthodes numbering, build et setParameters. Hors lors de la compilation j'ai ce message d'erreur
"FEM_BASE<double>::numbering(int, int, int, int, Assembler<double>&, bool)", referenced from:
_main in main.o
"BS_European<double>::build(Assembler<double>&, int, int)", referenced from:
_main in main.o
vtable for BS_European<double>in main.o
"BS_European<double>::setParameters(std::vector<double, std::allocator<double> >)", referenced from:
_main in main.o
vtable for BS_European<double>in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit statusEst-ce que l'un d'entre vous pourrais me dire la ou j'ai péché ?
Un grand merci
#14 Re : -1 » [résolu][c++] problème de vtable » Le 10/02/2011, à 13:52
- no_spleen
- Réponses : 3
Un grand merci ! Y-a-t-il une raison particulière à ce comportement ?
#15 -1 » [Python] Aller chercher des données sur une page internet » Le 27/08/2010, à 11:33
- no_spleen
- Réponses : 5
Bonjour,
J'utilise python principalement pour du calcul scientifique, mais je souhaite étendre mes activités, et par la même occasion mes compétences en programmation.
Je souhaite écrire un script qui aille rechercher des données sur certains sites internet, par exemple celui-ci
http://www.fortuneo.be/fr/bourse/
Pour ensuite les utiliser dans des calculs.
Est-ce que quelqu'un pourrait m'indiquer :
- Les grandes étapes de l'algorithme
- Les modules utiles
- Les connaissances à acquérir pour écrire ce genre de script
Un grand merci !
#16 Re : -1 » [Python] Aller chercher des données sur une page internet » Le 29/08/2010, à 08:42
- no_spleen
- Réponses : 5
Merci, je vais regarder tout cela.
Je vous tiens au courant. Et si je fais fortune en bourse, je fais un don à ubuntu-fr ;-)
#17 Re : -1 » bruit sous freefem » Le 01/08/2010, à 09:48
- no_spleen
- Réponses : 9
Bonjour,
Je ne comprend pas non plus très bien la question, mais j'ai peu être une piste. Ce que tu veux faire c'est un genre d'analyse de sensibilité de ta méthode en appliquant des petites erreurs sur tes conditions aux limites, récupérer la réponse que tu lisses pour ensuite la comparer à la bonne réponse ?
Si oui, cela ne dois pas être impossible. Je ne connais pas freefem mais je vois que c'est en c++, tu dois donc pouvoir ajouter des fonctions en c++.
1) Pour le bruit, il suffit de générer un vecteur de taille égale à ton nombre de conditions aux limites, le remplir avec une liste de nombres aléatoires suivant une distribution normale dont l'écart-type dépendra de l'amplitude de ton bruit et dont la moyenne sera 0, et de l'ajouter a ton vecteur de conditions aux limites. Pour cela, il y a des librairies scientifiques qui te fournissent des algo de génération de nombres pseudo-aléatoires. Le farfadet te renseignera mieux que moi.
2) Pour le lissage, c'est pareil. Si tu peux obtenir ton vecteur de solution avec les coordonnées des points, il y a des librairies scientifiques pour cela. Le farfadet te renseignera encore une fois mieux que moi.
Voilà ce que j'ai compris du problème. J'espère ne pas être trop à coté de la plaque...
#18 Re : -1 » bruit sous freefem » Le 01/08/2010, à 18:47
- no_spleen
- Réponses : 9
Je ne voulais pas te rejeter toute la responsabilité des réponses ! Mais, comme tu le sais, je suis plus à l'aise en FORTRAN qu'en C++. J'imagine qu'en tant qu'utilisateur régulier de ce dernier, tu connais plus de librairies dédiées que moi.
Pour ma part, je connais la GSL, mais peut-être il y a mieux !?
EDIT : j'ai remplacé STL par GSL, mes doigts ont fourchés
#19 Re : -1 » [PYTHON] forcer à vider la mémoire » Le 12/07/2010, à 13:22
- no_spleen
- Réponses : 15
J'aimerais trouver une manière de réaliser cela automatiquement, car j'ai des dizaines de fichiers de fonctions, toutes très longues.
#20 Re : -1 » [PYTHON] forcer à vider la mémoire » Le 13/07/2010, à 08:57
- no_spleen
- Réponses : 15
Bonjour à tous,
J'ai essayé d'effacer toutes mes variables une à une en fin de chaque fonction, mais rien à faire, ma mémoire continue à baisser au cours de l'exécution.
Malheureusement, je ne suis pas autorisé à publié le code, mais je vais construire un petit exemple représentatif.
Est-ce qu'il y a moyen d'afficher toutes la variables en mémoire ? Je pourrai ainsi vérifier ce qu'il reste dans la mémoire après chaque itération.
#21 Re : -1 » [PYTHON] forcer à vider la mémoire » Le 13/07/2010, à 09:17
- no_spleen
- Réponses : 15
J'ai trouvé la fonction dir() pour afficher les variables en mémoire, et à la fin de chaque itération toutes mes variables sont bien effacées.
Autre hypothèse. Mes fichiers de fonction utilisent tous un certain nombre de modules, souvent les mêmes (numpy,scipy,...) si j'appelle deux modules a et b, et que chacun appelle le module c, ce dernier sera-t-il chargé deux fois ?? Si oui, est-il possible d'éviter ce comportement ?
#22 Re : -1 » [PYTHON] forcer à vider la mémoire » Le 13/07/2010, à 15:41
- no_spleen
- Réponses : 15
Comment peut-on afficher TOUT ce qui est en mémoire ?
#23 Re : -1 » [PYTHON] forcer à vider la mémoire » Le 14/07/2010, à 08:41
- no_spleen
- Réponses : 15
Curiosité
Si je fais à chaque itération
print sys.getsizeof(gc.get_objects())Le nombre obtenu reste absolument constant, cela signifie que la taille des objets en mémoire reste constante non ?
#24 Re : -1 » [PYTHON] forcer à vider la mémoire » Le 14/07/2010, à 14:57
- no_spleen
- Réponses : 15
J'ai résolu le problème de façon pragmatique en utilisant parallel python. Je lance ma fonction dans un nouveau thread que je tue une fois la réponse obtenue, libérant ainsi la mémoire.
Mais j'aimerai tout de même comprendre d'où peut venir mon problème. Je me dit que cela peut venir des librairies externes que j'utilise, par exemple la librairie getfem qui est écrtite en c++. C'est plausible ? Cela expliquerait-il que mon
gc.get_objects()garde la même taille alors que ma mémoire diminue ?