PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : c++ - system() beinflusst Pointer (64-Bit)


Hypothraxer
2010-06-17, 08:58:02
Morgen

Ich habe hier folgendes Problem:

Ein Program von mir führt u.a. einige binäre Programme via system() aus. Das funktioniert unter Ubuntu 9.04 32-Bit ohne Probleme.

Unter Ubuntu 10.04 64-Bit jedoch werden die Bilder, die via OpenCV-Pointer geladen sind, verändert, sobald das erste system() ausgeführt wird (Konkret: Der Pointer zeigt immer noch auf den gleichen Adressbereich, aber der Inhalt ist nicht mehr zu gebrauchen).

Kann es sein, dass das Binary im Speicherbereich des Hauptprogrammes rumfummelt? Und warum tut es das unter 32-Bit nicht?

Ich habe dann mal testweise unter Ubuntu 9.04 32-bit Valgrind laufen lassen:


==23517==
==23517== HEAP SUMMARY:
==23517== in use at exit: 506 bytes in 18 blocks
==23517== total heap usage: 12,850,972 allocs, 12,850,954 frees, 1,727,022,070 bytes allocated
==23517==
==23517== LEAK SUMMARY:
==23517== definitely lost: 0 bytes in 0 blocks
==23517== indirectly lost: 0 bytes in 0 blocks
==23517== possibly lost: 0 bytes in 0 blocks
==23517== still reachable: 506 bytes in 18 blocks
==23517== suppressed: 0 bytes in 0 blocks


Die 506 bytes stammen aus libxml2 und sind m.m.N. nicht das Problem. Hat da jemand eine Idee, was das Problem sein könnte?

Gast
2010-06-17, 09:03:57
liegt eindeutig am pointer

Hypothraxer
2010-06-17, 10:11:21
Tjaja - wie es halt so ist...ich dürfte den Fehler gefunden haben.
Wen es interessiert: Da ich mit Bildern arbeite, kann es sein, dass die Funktionen mehr als 2 GiB Arbeitsspeicherverbrauchen - weswegen ich ein Downsampling durchführe. Der nun beschriebene Effekt tritt nur dann auf, wenn ich mit Bildern arbeite, die kein Downsampling benötigen (unter 6 Megapixel).
Tjaja...da wurde wohl ein Pointer gelöscht, der nicht hätte gelöscht werden sollen....was haben wir gelacht.

Besten dank an den Gast und seinen Kommentar.