Stack Corruption

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
miCro
Beiträge: 4
Registriert: 15.12.2003 17:39:09

Stack Corruption

Beitrag von miCro » 15.12.2003 17:45:04

Hi!

Ich versuche gerade Sourcecode aus VC6 in VC7 zum Laufen zu bringen. Dabei bekomme ich in folgender Funktion am Ende einen Runtime Error "Stack around the variable 'Byte2' was corrupted" (Die Umwandlung funktioniert aber trotzdem)

Code: Alles auswählen

void String2Bin(CString String, BYTE *Bin, int *BinLen) 
{
	//BinLen input is max. length
	CString String2;
	char ByteString[3];
	int i;
	int DestPos;
	int MaxBinLen;
	BYTE Byte2;

	MaxBinLen = *BinLen;
	ByteString[2] = 0;
	*BinLen = 0;

	if(MaxBinLen <= 0)
	{
		return;
	}
	if(String.GetLength() <= 0)
	{
		return;
	}
	if(String.GetLength() > (MaxBinLen * 2))
	{
		return;
	}
	if((String.GetLength() % 2) != 0)
	{
		return;
	}

	String.MakeUpper();

	DestPos = 0;
	for(i=0; i<String.GetLength(); i+=2)
	{
		ByteString[0] = String.GetAt(i);
		ByteString[1] = String.GetAt(i+1);
		sscanf(ByteString, "%02X", &Byte2);
		Bin[DestPos++] = Byte2;
	}

	//Gegenprobe
	Bin2String(&String2, Bin, DestPos);

	if(String2.CompareNoCase(String) != 0)
	{
		//Fehler: String ist ungueltig
		*BinLen = 0;
		return;
	}

	*BinLen = DestPos;
}
Wenn ich die sscanf Zeile auskommentiere und Byte2 vorher setze, dann funktionierts einwanfrei.

MfG
miCro

Benutzeravatar
Bert
Beiträge: 3751
Registriert: 16.07.2002 14:06:52
Wohnort: Dresden
Kontaktdaten:

Beitrag von Bert » 15.12.2003 18:00:20

Dir ist bekannt das das hier ein Debianforum ist? (Debian ist eine Linuxdistribution) Mir ist (glücklicherweise) keine Portierung von VC6/7 Nach GNU/Linux bekannt.

Nimms nicht übel, aber da draußen gibts viele C++ Foren, die sich mit VC und MFC rumärgern. Ich bin mir sicher, daß Du dort schneller hilfe bekommest als hier ;-)
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de

miCro
Beiträge: 4
Registriert: 15.12.2003 17:39:09

Beitrag von miCro » 15.12.2003 18:06:08

Hi!

Ich hab garnicht darauf geachtet, das das hier ein Debianforum ist ;).

Das Forum wurde mir von jemandem empfohlen

Vielleicht hilft mir ja trotzdem jemand, obwohl ich auch Windows benutze.

MfG
miCro

Benutzeravatar
spiffi
Beiträge: 1128
Registriert: 09.08.2003 19:02:27

Beitrag von spiffi » 15.12.2003 18:07:40

Code: Alles auswählen

sscanf(ByteString, "%02X", &Byte2);
Hier liegt der Hund begraben. Du versuchst einen unsigned int (genau das liefert ein %x) in eine Byte-Variable zu schreiben.
Das Du nachher trotzdem den richtigen Wert in der Variablen stehen hast, hast Du der Little Endian Byteorder (lowbyte - hibyte) auf Intel Systemen zu verdanken. Das Low-Byte landet in der Varibalen Byte, das High-Byte im darauffolgenden Byte.
Auf nem Rechner mit Motorolla CPU würde das Programm nicht laufen.[/quote]

Benutzeravatar
Bert
Beiträge: 3751
Registriert: 16.07.2002 14:06:52
Wohnort: Dresden
Kontaktdaten:

Beitrag von Bert » 15.12.2003 18:09:51

Mist Spiffi war wieder schneller. War schon am suchen, aber da ich so selten scanf/prontf und Konsorten verwende, mußte ich erst nachlesen :-)

Genau aus diesen Gründen verwende ich diese unsäglichen Funktionen ja auch nicht ...
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de

miCro
Beiträge: 4
Registriert: 15.12.2003 17:39:09

Beitrag von miCro » 15.12.2003 18:11:10

Hi!

Wunderbar! Byte2 als unsigned int definiert und es läuft. Komisch, das beim anschließenden impliziten Typcast kein Fehler auftritt...

MfG
miCro

Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blackm » 15.12.2003 18:16:29

miCro hat geschrieben:Vielleicht hilft mir ja trotzdem jemand, obwohl ich auch Windows benutze.
Na das will ich ja fuer den, der mit dem Gedanken spielt, nicht hoffen.

Also nicht das ich hier irgendwelche Minderheiten diskriminieren oder ausgrenzen will, aber ich denke es gibt genug Foren zu Windows und Sprachen die mir Windows zu tun haben.

miCro, such einfach mal bei google nach forum windows da findest du genug - ist natuerlich nicht garantiert das es in den anderen Foruen so nett zugeht wie hier. Aber du kannst ja zu Debian wechseln, dich mit einer Sprache beschaeftigen die unter Debian verwendet werden kann und dann kannst du uns auch wieder mit Fragen loecher (auf die wir dann auch antworten werden) :-)

by, Martin
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

miCro
Beiträge: 4
Registriert: 15.12.2003 17:39:09

Beitrag von miCro » 15.12.2003 18:24:58

Hab ja jetzt meine Antwort bekommen ;).

Ab jetzt nur noch fragen zu Programmierung unter Linux...

MfG
miCro

init 0
Beiträge: 673
Registriert: 21.10.2003 19:40:28

Beitrag von init 0 » 16.12.2003 18:09:34

Hi,

spiffi, Hut ab. Fehler gefunden, höflich beantwortet obwohl keine Debiangeschichte. Ich hätte das eine nicht gekonnt und das andere nicht gewollt.
Ich schäme mich.

Antworten