C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

falscher Zeiger auf Member func in Template

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Ernst Murnleitner
Guest





PostPosted: Sat May 19, 2007 5:11 am    Post subject: falscher Zeiger auf Member func in Template Reply with quote



Hallo,

ich habe da ein komisches Phänomen im Zusammenhang mit templates:

In einem Funktions-Template verwende ich einen Zeiger auf eine
Member-Funktion einer Klasse R. Dieses Template wird in mehreren *.cpp
Dateien verwendet. Nun habe ich in diese Klasse R eine neue Memberfunktion
eingefügt und das Programm ist abgestürzt. Beim Debuggen habe ich gesehen,
dass die falsche Funktion angesprungen wurde. Nach löschen aller
Objektfiles und neuem kompilieren funktionierte wieder alles korrekt. Ich
konnte das noch einmal mit einer andern Kopie nachvollziehen.

Ich habe nun versucht, das Problem mit einem kleinen Testprogramm
nachzuvollziehen, da tritt es nicht auf, da bei allen Änderungen alle
relevanten Dateien durchkompiliert werden (gcc 4.1, KDevelop).
Ich vermute, dass irgendwo eine Instanz des Templates ist, welches
fälschlicherweise bei Änderung der Klasse R nicht neu kompiliert wurde und
daher der Zeiger auf die falsche Adresse zeigt.

Ist das ein Problem mit dem Makefile, wo evt. Abhängigkeiten fehlen könnten
(wurde mit gnu automake erzeugt) oder gibt es in der Tat eine Situation, wo
solch ein Verhalten reproduziert werden kann?

Viele Grüße

Ernst
Back to top
Rolf Magnus
Guest





PostPosted: Sat May 19, 2007 1:46 pm    Post subject: Re: falscher Zeiger auf Member func in Template Reply with quote



Ernst Murnleitner wrote:

Quote:
Hallo,

ich habe da ein komisches Phänomen im Zusammenhang mit templates:

In einem Funktions-Template verwende ich einen Zeiger auf eine
Member-Funktion einer Klasse R. Dieses Template wird in mehreren *.cpp
Dateien verwendet. Nun habe ich in diese Klasse R eine neue Memberfunktion
eingefügt und das Programm ist abgestürzt. Beim Debuggen habe ich gesehen,
dass die falsche Funktion angesprungen wurde. Nach löschen aller
Objektfiles und neuem kompilieren funktionierte wieder alles korrekt. Ich
konnte das noch einmal mit einer andern Kopie nachvollziehen.

Ich habe nun versucht, das Problem mit einem kleinen Testprogramm
nachzuvollziehen, da tritt es nicht auf, da bei allen Änderungen alle
relevanten Dateien durchkompiliert werden (gcc 4.1, KDevelop).
Ich vermute, dass irgendwo eine Instanz des Templates ist, welches
fälschlicherweise bei Änderung der Klasse R nicht neu kompiliert wurde und
daher der Zeiger auf die falsche Adresse zeigt.

Ist das ein Problem mit dem Makefile, wo evt. Abhängigkeiten fehlen
könnten (wurde mit gnu automake erzeugt) oder gibt es in der Tat eine
Situation, wo solch ein Verhalten reproduziert werden kann?

Klingt nach ersterem. Vermutlich fehlt irgendwo die Abhängigkeit vom Header,
in dem das Template definiert ist.
Back to top
James Kanze
Guest





PostPosted: Mon May 21, 2007 1:31 pm    Post subject: Re: falscher Zeiger auf Member func in Template Reply with quote



On May 19, 2:11 am, Ernst Murnleitner <m...@awite.de> wrote:

Quote:
ich habe da ein komisches Phänomen im Zusammenhang mit templates:

In einem Funktions-Template verwende ich einen Zeiger auf eine
Member-Funktion einer Klasse R. Dieses Template wird in mehreren *.cpp
Dateien verwendet. Nun habe ich in diese Klasse R eine neue Memberfunktion
eingefügt und das Programm ist abgestürzt. Beim Debuggen habe ich gesehen,
dass die falsche Funktion angesprungen wurde. Nach löschen aller
Objektfiles und neuem kompilieren funktionierte wieder alles korrekt. Ich
konnte das noch einmal mit einer andern Kopie nachvollziehen.

Ehelich gesagt, nicht erstaunlich. Du hast die Klasse R
geändert. Das heißt, dass du alle Quellen neu übersetzen musst,
wo sie überhaupt erscheint. (Wenn die Klasse R in einem Header
steht, heißt es, alle Moduln übersetzen, die diese Header auch
indirekt includiert.)

Wenn der Compiler "repositories" benutzt, kann dieses Problem
auch wegen Fehler im Compiler auftauchen. Die zwei gängigsten
Compiler, VC++ und g++, aber benützen keine "repositories".

Quote:
Ich habe nun versucht, das Problem mit einem kleinen Testprogramm
nachzuvollziehen, da tritt es nicht auf, da bei allen Änderungen alle
relevanten Dateien durchkompiliert werden (gcc 4.1, KDevelop).
Ich vermute, dass irgendwo eine Instanz des Templates ist, welches
fälschlicherweise bei Änderung der Klasse R nicht neu kompiliert wurde und
daher der Zeiger auf die falsche Adresse zeigt.

Ich wurde auch darauf tippen.

Quote:
Ist das ein Problem mit dem Makefile, wo evt. Abhängigkeiten fehlen könnten
(wurde mit gnu automake erzeugt) oder gibt es in der Tat eine Situation, wo
solch ein Verhalten reproduziert werden kann?

Wahrscheinlicherweise ein Problem mit dem Makefile. (Obwohl mir
ist so etwas auch einmal passiert, weil die Uhrzeit auf zwei
unterschiedenen Rechnern nicht richtig synchronisiert war.) Hast
tu keinen Ziel "depends", oder so was, damit der Compiler auch
die Abhängigkeiten herstellt.

--
James Kanze (GABI Software) email:james.kanze (AT) gmail (DOT) com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.