Eigenartiges Verhalten in String-Klasse

Hast du schon einmal einen Breakpoint auf die Zuweisung gesetzt und bist mit dem Debugger schrittweise durchgegangen?
 
moin


1.
Du machst
ccc = ccc + string(";");
warum machst du nicht
ccc = ccc + ';' ;

2.
An der Funktion bla() kanns ja eigentlich nciht liegen da
cmd = bla(cmd,aCgName); // Funktioniert
funktioniert!

3.
cmd = bla(cmd,"RESET CG:CG?="); // Funktioniert nicht!
Irgenwie gefällt mir der String "RESET CG:CG?=" nicht, villeicht mal "RESET CG\:CG\?\=" halt sowas in der Art versuchen.

Sind halt alles nur Vermutungen und Ideen.


mfg
umbrasaxum
 
Zuletzt bearbeitet:
Wir würden das Programm gerne mit Purify testen, jedoch haben wir schon früher schlechte Erfahrungen mit Analyse-Tools gemacht, weil unser Projekt einfach so riesen groß ist. Analyse-Tools verändern das Laufzeitverhalten. Teilweise so dramatisch, daß unser Projekt nicht mehr wie vorgesehen läuft. Unsere Software ist sehr timing-abhängig.

Daß zwei Konstanten mit dem selben Inhalt auch die selbe Speicheradresse benutzen, war mir nicht klar. Danke für die Erklärung. Trotzdem ist es verwunderlich, daß ein Anlegen einer neuen CString-Instanz mit Initialisierung kurz nach der initialisierung immer noch leer ist. Genau so ein Character Array. Wie du sicher gelesen hast, funktioniert nichtmal sprintf oder strcpy. Und dabei ist es egal, welcher Wert sich in der Konstanten befindet, die an in das Character-Array geschrieben werden soll.

Ob irgendeine Zuweisung klappt, haben wir noch nicht versucht. Wäre aber mal gut zu wissen. Und wenn nicht? Und wenn doch?

@umbra:

1. Haben wir schon probiert. Funktioniert auch nicht.

2. Daran liegts auch nicht. Nur wenn wir der Funktion an zweiter Stelle statt einer Variablen eine Konstante übergeben, funktionierts wieder nicht mehr. Die Konstante ist in der Funktion dann leer.

3. Kann mir irgendwie nicht vorstellen, warum es da dran liegen sollte. Das System parsed den String ja nicht.

Sehr verwunderlich...
 
Zuletzt bearbeitet:
Vielleicht habt ihr ein Stackproblem.
Entweder ist der Stack zu klein, den ihr verwendet und es wird der Heap überschrieben.
Oder es sind Direktiven drin, die das Verhalten der Übergabe auf dem Stack/Stackaufräumen beeinflussen.

Allerdings passieren meist härtere Fehler/Abstürze, wenn dies so ist.
 
moin


Ich hab tdie Funktion "sprintf" benutzt, aber leider falsch! (Hoffe ich hba jetzt recht mit dem was ich sag)
Ihr benutzt sie nur mit 2 Argumenten, hab aber in der MSDN keine möglichkeit gefunden sie mit 2 Argemunten zum laufen zu kriegen.

Code:
#include <stdio.h>

int main( void )
{
   char  buffer[200], s[] = "computer", c = 'l';
   int   i = 35, j;
   float fp = 1.7320534f;

   /* Format and print various data: */
   j  = sprintf( buffer,     "   String:    %s\n", s );
   j += sprintf( buffer + j, "   Character: %c\n", c );
   j += sprintf( buffer + j, "   Integer:   %d\n", i );
   j += sprintf( buffer + j, "   Real:      %f\n", fp );

   printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}

Als erstes braucht die eine "Zeilvariable", als zweites einen "Controlstring" und als drittes eine Quelle.Vielleicht mal die das dritte Argument nciht weglassen sondern auf NULL setzen.


mfg
umbrasaxum
 
@umbras: an anderen Stellen funktioniert das auch so. Das ist wie mit printf. Die kann man auch mit nur einem Parameter aufrufen. Wir werden nochmal folgendes versuchen:

sprintf(cmd,"%s","HALLO");

vielleicht funktioniert das ja. Nur um der Funktion auch wirklich drei Parameter zu geben.



Aber wie Dorado schon sagte, was auch meine Vermutung ist, daß wir ein Speicherproblem haben. Eigenartig nur, daß das immer nur in dieser Funktion auftritt. Der Fehler ist ja nicht sporadisch sondern ideal nachstellbar.
 
@umbras:
sprintf(cmd,"%s","HALLO");
und
sprintf(cmd, "HALLO");
sind im Ergebnis das gleiche.

Ab dem dritten Parameter ist sprintf optional. Die Parameter müssen zu Laufzeit nur mit dem übereinstimmen was im Formatstring an Parametern angegeben ist.
Im ersten Fall ist es ein string, im zweiten Fall gibt es keinen weiteren Parameter.
 
moin


Wie schon gesagt, nur eine Idee.

Aber wenn nicht mal CString xxx="Hallo"; funktioniert, wird es wie ihr schon gesagt habt ein Problem mit dem Speicher sein.

Oder vorher schon irgendwas zerschossen?! Naja wie auch immer...


mfg
umbrasaxum
 
Vielleicht würde euch ein Dump des Stacks vor dem Funktionseintritt und nach dem Funktionseintritt helfen? (evtl. auch nach dem Funktionsverlassen?)
 

Neue Beiträge

Zurück