Fehlermeldung
-
nö.
Das kann alles sein.
-
Da kann man nicht mehr sagen, freundlich oder nicht (und dEUs' Anwort war gewiss nicht unfreundlich).
Du greifst wahrscheinlich über einen Nullzeiger lesend auf eine Struktur oder Klasse zu. Ohne Kenntnis deines Codes kann dir da niemand helfen. Zeig doch erstmal den Code, wo das passiert.
-
Nochmals für Leute, die nciht lesen können:
Diese Fehlermeldung lässt keinen Rückschluss auf den Fehler zu. Es kann sein, dass du nen nichtinitialisierten Zeiger verwendest, kann aber uahc was gnaz anderes sein. Ohne Code kann man das einfach nicht sagen!!!
-
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 HilfeHeisst das, dass es funktioniert?
