Fehlermeldung



  • void auslesen()
    {
    ifstream is;
    is.open(filename); //Datei zum lesen öffnen

    /while (is.good()) //überprüfen ob für E/A-Funktionen geeignet
    {
    c = is.get(); //auslesen
    cout << c;endl;
    }
    /

    //auslesen der Tabelle mit den Kanälen und dazugehörigen Werten
    /*int i=0; //muß Zahl zugewiesen werden(Zeilen)
    int j=0; //muß Zahl zugewiesen werden(Spalten)
    //int table[i][j]={};
    char table[2];
    cout<<table;
    /

    //Auslesen
    CSDBase *pSDBase = NULL;
    void *pdValues = NULL;
    CSDBStreamDataSet *pVal = NULL;

    double dAnzahlStuetzstellen=pVal->GetNumberOfEntries();
    //auslesen der Daten in einem Block, mit einmal alle
    pSDBase->ReadDataSetBlock((void*)pdValues,pVal,STREAM_BLOCK_REDUCE,dAnzahlStuetzstellen);

    cout<<pSDBase;
    }



  • double dAnzahlStuetzstellen=pVal->GetNumberOfEntries();
    das is der Fehler.
    pVal hat den Wert 0, zeigt also auf kein Objekt.



  • das war nicht der fehler, denn der Fehlercode kommt immer noch



  • was hast du denn jetzt geändert?



  • void readlist()
    {
    //Variablen festlegen
    CSDBase *pSDBase = NULL;
    CSDBStreamExp *pExp = NULL;

    CString filename;
    //BasisChannel bestimmen
    CString strBasisChannel;

    //Pointer
    void *pdVal;
    void *pBasisChn = NULL;
    void *pdBasisValue = NULL;
    void *pdValues = NULL;

    CSDBStreamDataSet *pVal;
    double dAnzahlStuetzstellen=pVal->GetNumberOfEntries();

    //BasisChannel bestimmen
    CSDBStreamRun *pRun = pSDBase->OpenStreamRun(pExp->GetTableName());
    CSDBStreamAnalysis *pAna = pSDBase->OpenStreamAnalysis(pRun->GetTableName());
    strBasisChannel = pAna->GetBaseChannelName();

    //auslesen der Daten in einem Block, mit einmal alle
    pSDBase->ReadDataSetBlock((void*)pdValues,pVal,STREAM_BLOCK_REDUCE,dAnzahlStuetzstellen);

    cout<<pSDBase;

    CloseSimplorerDataBase(pSDBase);
    }

    kannst du mir vielleicht sagen wie ich es sonst ändern soll!Das Programm soll aus einer *.sdb-Datei auslesen, diese ist ähnlich wie eine Excel-Tabelle aufgebaut!!!

    Danke



  • Les mal ein Tutorial über Zeiger. Du verwendest die ganze Zeit nicht- oder mit NULL initialisierte Zeiger!!!!



  • CSDBase *pSDBase = NULL;
    void *pdValues = NULL;
    CSDBStreamExp *pExp = NULL;

    pSDBase = OpenSimplorerDataBaseRO(filename);
    pExp = pSDBase->OpenStreamExp();

    CSDBStreamRun *pRun = pSDBase->OpenStreamRun(pExp->GetTableName());
    CSDBStreamAnalysis *pAna = pSDBase->OpenStreamAnalysis(pRun->GetTableName());
    // channel oeffnen
    CSDBStreamChannel *pChnLeft = pSDBase->OpenStreamChannel( pAna->GetTableName());
    CSDBStreamDataSet *pVal = pSDBase->OpenStreamDataSet(pChnLeft->GetTableName(),pChnLeft->GetDataType(),pChnLeft->CalcChannelValSize());

    double dAnzahlStuetzstellen=pVal->GetNumberOfEntries();
    //auslesen der Daten in einem Block, mit einmal alle
    pSDBase->ReadDataSetBlock((void*)pdValues,pVal,STREAM_BLOCK_REDUCE,dAnzahlStuetzstellen);

    cout<<pSDBase;

    Kommt immernoch ein Speicherfehler!!!! 😕



  • Bist du sicher, dass es an diesem Code liegt?



  • ja, weil ich ja nur den Code derzeit durchlaufen lasse



  • dann versuch mal die Zeile rauszufinden, in der er abstürzt.



  • Es kann sein, dass eine der Funktionen einen Nullzeiger zurückgibt, weil etwas schiefgegangen ist. Es wäre auch möglich, dass ReadDataSetBlock versucht, in den Speicher zu schreiben, auf den pdValues zeigt.



  • danke für eure Hilfe



  • Original erstellt von sonnenschein1984:
    danke für eure Hilfe

    Heisst das, dass es funktioniert? 😕


Anmelden zum Antworten