Zugriff auf eine Vectorliste

der Abstrutz passiert nur auf einem Rechner auf dem keine MS VisualStudio Entwicklungsumgebung installiert ist.
Ja, das sagtest du schon.
Auf meinem Rechner ist WIN7 und MS VisualStudio installiert.
Da läufts im Debugmodus und Releasemodus, selbst wenn das Programm direkt installiert ist und ausgeführt wird.

Es muss irgend eine unterstützende Funktion von der Entwicklungsumgebung sein, die auf meinem Rechner den Absturz verhindert.
Ich würde eher davon ausgehen, dass es etwas mit dem anderen Rechner zu tun hat (Speicherfehler?). Hast du das mal auf einem dritten Rechner (ohne VS) ausprobiert?

Jedenfalls bringt Rumraten recht wenig. Stelle das Was und Warum fest und berichtige die Ursache.
 
Wo holst du den Wert für sLeisteParam her?

Das sieht vom Namen her aus wie ein Wert, der durch eine WindowProc geschleift wird. Evtl. erwartest du eine Nachricht, aber auf dem anderen System kommen die in einer anderen Reihenfolge?
 
Hallo Endurion,

den übergebe ich beim Funktionsaufruf in der ich die Vectorliste fülle.

Code:
header:

typedef struct tLEISTEPARAM
{
	int iKennung;
	char cBohrungZeich[8];
	double dLaenge, dBreite, dHoehe;
	double dOffsetX, dOffsetY;
	double dBohrungD, dBohrungX;
	double dMatStaerke;
	double dBiegeRadius;
	vector <double> vBohrungY;
	

} stLEISTEPARAM;

cpp:

stLEISTEPARAM sLeisteParam;

ErzeugeVerstaerkungLeiste(&sLeisteParam);

ErzeugeVerstaerkungLeiste(stLEISTEPARAM *sLeisteParam)
{
    sLeisteParam->vBohrungY.push_back(-875.0);
    sLeisteParam->vBohrungY.push_back(-625.0);
    sLeisteParam->vBohrungY.push_back(-375.0);
    sLeisteParam->vBohrungY.push_back(-125.0);
    sLeisteParam->vBohrungY.push_back(125.0);
    sLeisteParam->vBohrungY.push_back(375.0);
    sLeisteParam->vBohrungY.push_back(625.0);
    sLeisteParam->vBohrungY.push_back(875.0);
}

Ich denke, dass eine andere Deklaration der Vectorliste erforderlich ist.


MfG.
fujitsufan
 
Ich denke, dass eine andere Deklaration der Vectorliste erforderlich ist.
Unsinn. Hör doch endlich auf rumzuraten und untersuche das Problem um es erst einmal zu verstehen. Danach kannst du anfangen das Problem zu lösen.

Vermutlich liegt der Fehler in einem Codeteil deines Programms, den du uns nicht gezeigt hast.

Verwende einen JIT Debugger auf dem Zielsystem. (das ist das Einfachste und vermutlich Beste was man machen kann(!)) Alternativ, verwende Remote Debugging http://msdn.microsoft.com/en-us/library/vstudio/y7f5zaaa(v=vs.100).aspx

Versuche ein vollständiges Minimalprogramm zu erstellen. Entweder top-down (Reduktion deines vorhandenen Codes) oder bottom-up (halt anders herum).
 
Hallo zusammen,

vielen Dank für den Tip.
In einem Miniprogramm funktionierts.
Es saß noch an einer anderen Stelle die Funktion "memset(sLeisteParam,0,sizeof(sLeisteParam)", was natürlich
unberechenbare Auswirkungen zur Folge hatte. Die "memset(,,)" ist schon gewollt, hatte aber fälschlicherweise
die Variable "sLeisteParam" als Übergabeparameter drin.

("memset" kann potentiell interne Daten in einen ungültigen Zustand versetzen).

Beim Debuggen ist das Memory-Layout komplett anders, deshalb bereiten Programmierfehler oft erst bei der Release-Version Probleme. Der Debugger legt im Speicher um jedes Objekt zusätzliche Speicherbereiche mit einem speziellen Muster an, damit er z.B. auf Bufferoverflow oder Corrupted-Stack prüfen kann.
So hab´ ich´s gelernt.

Trotzdem vielen Dank!
Fehler behoben, Situation eindeutig, läuft.:eek:

MfG.
fujitsufan
 
Zurück