Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

nombre réponses : 25

#0 Re : -1 »  [C++] Taille d'un tableau par un pointeur. » Le 02/08/2014, à 12:51

no_spleen
Réponses : 10

Bonjour,

Difficle de donner une réponse précise sans plus de détails sur ton code, mais est-ce que tu ne peux pas remplacer ton tableau par un std::vector < std::string > , ou un std::vector < std::vector < std::string > > ? std::vector possède en effet une fonction size() qui te permet de connaitre la taille de ton vecteur.

#1 Re : -1 »  besoin d'aide pour un code c. » Le 24/08/2013, à 13:29

no_spleen
Réponses : 5

Bonjour,

Une piste pour continuer : as tu essayé ton code ? Je te propose de tester ta fonction sur quelques cas de tests, et les résultats devraient te permettre d'avancer.

#2 Re : -1 »  C: de int vers char* » Le 24/08/2013, à 13:48

no_spleen
Réponses : 6

Salut,

Je ne dois pas bien comprendre ton problème, car j'ai l'impression qu'il suffit de faire cela

   char a = autreFonction();
   int b = fonction(&a);

#3 -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;
};

#endif

iterator.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;};
};


#endif

square.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();
};


#endif

board.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,

#4 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 :-)

#5 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 !

#6 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,

#7 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

#8 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
}

#9 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
}

#10 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.

#11 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.

#12 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.

#13 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

#14 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]*')

#15 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.

#16 -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 status

Est-ce que l'un d'entre vous pourrais me dire la ou j'ai péché ?

Un grand merci

#17 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 ?

#18 -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 !

#19 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 ;-)

#20 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...

#21 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

#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 ?