IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

TSmalIntArray Erreur appel Add [Langage/Algorithme]


Sujet :

C++Builder

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 12
    Par défaut TSmalIntArray Erreur appel Add
    Bonjour à tous,

    Dans un projet sous BCB6, j'utilise un TSmallIntArray.

    L'allocation avec new se passe bien, mais dès que j'utilise la méthode Add, à l’exécution, j'ai le message suivant :

    Project Project1.exe raised exception class ELowCapacityError with message 'The DecisionCube Capacity is low. Please deactivate dimensions or change the data set.'

    Je n'arrive pas à trouver la cause de cet échec, quelqu'un a-t-il une idée

    Merci

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut ** Phil **
    Je pense que tu devrais poster le code qui donne l'erreur, apparement tu utilise un TDecisionCube Qui recoit une valeur erronee

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 12
    Par défaut
    Ce code basique suffit pour provoquer l'erreur chez moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    #include <mxarrays.hpp>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
        TSmallIntArray *_t = new TSmallIntArray(0, 0);
        _t->Add(1);
        delete _t;
    }
    //---------------------------------------------------------------------------
    Et je n'utilise pas de TDecisionCube . . . c'est vraiment étrange

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Bizarre, j'ai teste le code de deux manieres et je n'ai pas d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #pragma hdrstop
    #include "Unit1.h"
    #include <mxarrays.hpp>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
         : TForm(Owner)
    {
    TSmallIntArray *_t = new TSmallIntArray(0, 0);
    _t->Add(1);
    delete _t;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TSmallIntArray *_t = new TSmallIntArray(0, 0);
    _t->Add(1);
    delete _t;
    }
    Je suis sous BCB6 Window7 64bits
    Avant de lancer BCB6 regarde si le fichier projet est bien vide, il ne doit y avoir que deux repertoires Bpl et Lib rien d'autre, le chemin " C:\Program Files (x86)\Borland\CBuilder6\Projects "

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 12
    Par défaut
    C'est effectivement très bizarre, chez moi j'ai essayé ce petit code sur mon fixe et mon portable, j'ai la même erreur. Les deux calculateurs sont sous XP pro.

    J'ai déjà utilisé des TSmallIntArray chez moi et ça marchait. Je ne vois pas ce que j'ai changé dans les options de Builder 6 ou sur mes machines de plus ça marche à l'asso pour qui je code une application, leurs PC sont aussi sous XP.

    En fouillant sur le net, j'ai constaté que certains ont rencontré ce problème, mais je n'ai pas vu de solution

    Avec des TList ou des TStringList, je n'ai pas de souci, j'y perds le peu de latin qu'il me reste . . .

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    Vous ne confondez pas TSmallIntDynArray et TSmallIntArray ?

    TSmallIntDynArray correspond au array of SmallInt de Delphi, c'est un type simple, unité Types (ou sysdyn.h)
    TSmallIntArray est type interne de DecisionCube (faut la version Entreprise !)

    L'exception ELowCapacityError est déclenchée quand le cache d'un cube de décision est trop grand. La mémoire disponible pour le cube de décision peut être augmentée en modifiant la valeur de la propriété Capacity du cube de décision. Il est également possible de diminuer la mémoire utilisée par le cube en désactivant certaines de ses dimensions.
    sinon, en c++, il y a aussi std::vector<SmallInt>.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 12
    Par défaut
    J'ai une version Enterprise et je souhaite bien utiliser un TSmallIntArray. Lorsque je touche à la propriété Capacity, j'ai le même message d'erreur.

    J'ai essayé ce code avec un TIntegerDynArray qui fonctionne chez moi, merci pour le tuyau. Je ne m'explique cependant pas l'exception déclenchée par le DecisionCube

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //#include <Sysdyn.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
        TIntegerDynArray _t;
        for(int i = 0; i < 10; i++)
        {
            _t.Length += 1;
            _t[i] = i;
        }
        for(int i = _t.Low; i <= _t.High; i ++)
        {
            Memo1->Lines->Add(_t[i]);
        }
        _t.Length = 0;
    }
    //---------------------------------------------------------------------------
    Merci pour votre aide.

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    J'ai trouve ceci dans l'aide en ligne

    Spécifie le nombre maximum d'éléments qui peuvent être ajoutés au tableau.
    __property int Capacity = {read=FCapacity, write=SetCapacity, nodefault};
    Description
    Initialisez Capacity pour changer la quantité de mémoire allouée pour le tableau. Toute tentative d'initialiser Capacity à une valeur inférieure à celle de la propriété Count déclenche une exception EArrayError.
    Si la propriété AutoSize vaut true, la propriété Capacity du tableau augmente automatiquement si nécessaire pour tenir compte des nouveaux éléments ajoutés.
    Remarque : Pour déterminer la quantité de mémoire utilisée par le tableau, utilisez Capacity * ItemSize
    C'est peut etre ton probleme

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 12
    Par défaut
    Juste après l'allocation j'ai

    Count = 0
    Capacity = 0
    AutoSize =true
    ItemSize = 2

    Si je fais _t->Capacity = 1; je provoque l'exception

  10. #10
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par défaut
    Hello,

    La question qui tue: Tu as combien de mémoire sur les PC où ça foire ??
    Plus de 2 Go ??

    C'est un bug de nain dans la VCL (cf. QualityCentral - le rapport de bug concerne Delphi, mais c'est pareil pour Builder)

    Mets l'unité DecisionCubeBugWorkaround.pas dans ton projet, et ça devrait aller.

    Citation Envoyé par ** Phil ** Voir le message
    C'est effectivement très bizarre, chez moi j'ai essayé ce petit code sur mon fixe et mon portable, j'ai la même erreur. Les deux calculateurs sont sous XP pro.

    J'ai déjà utilisé des TSmallIntArray chez moi et ça marchait. Je ne vois pas ce que j'ai changé dans les options de Builder 6 ou sur mes machines de plus ça marche à l'asso pour qui je code une application, leurs PC sont aussi sous XP.

    En fouillant sur le net, j'ai constaté que certains ont rencontré ce problème, mais je n'ai pas vu de solution

    Avec des TList ou des TStringList, je n'ai pas de souci, j'y perds le peu de latin qu'il me reste . . .
    Fichiers attachés Fichiers attachés

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 12
    Par défaut
    Bingo merci Totoche76 ça marche en ajoutant le DecisionCubeBugWorkaround.pas au projet.

    Alors, pour aller un peu plus loin,

    - chez moi les PC ont 2 et 3 Go de RAM, j'ai le bug
    - a mon asso ils ont 2 Go de RAM et ça marche sans bug.
    - toutes les machines sont sous XP Pro SP3

    La différence, chez moi j'ai de l'Intel à l'asso de l'AMD, est-ce une explication . . .

    En tout cas, merci à tous pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. GSEC erreur "service Add User is not defined"
    Par charlyoleg dans le forum Administration
    Réponses: 1
    Dernier message: 13/12/2007, 09h43
  2. Erreur : Appel de procedure (Fonction Mid)
    Par l1xnoir dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/04/2007, 19h40
  3. [ASE11]Erreur de "add space"
    Par DamienG dans le forum Sybase
    Réponses: 6
    Dernier message: 26/10/2006, 16h40
  4. Réponses: 12
    Dernier message: 12/05/2006, 09h21
  5. Erreur appel fonction java d'une jsp
    Par itachi38 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 29/04/2006, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo