ubuntuusers.de

C Dynamische Strukturen(Arrays)

Status: Gelöst | Ubuntu-Version: Ubuntu 11.10 (Oneiric Ocelot)
Antworten |

Darkstar999

Avatar von Darkstar999

Anmeldungsdatum:
21. September 2008

Beiträge: 324

Hallo ich habe da ein Problem!

Ich suche eine IDE für Linux für die Sprache C wo ich die Möglichkeit hebe in dynamisch Strukturen(Arrays) beim Debuggen reinzuschauen. Das ist ziemlich wichtig da ich in Grundlagen der Informatik und Programmierung jetzt bei dynamischen Strukturen(Arrays) angekommen bin. Weder Eclipse noch Netbeans erfüllen dieses Kriterium, sie zeigen immer nur das erste Element an bzw. die erste Struktur an. Kennt da jemand eventuell eine Ide mit der es geht ?

Mit freundlichem Gruß, darkstar999

stfischr Team-Icon

Avatar von stfischr

Anmeldungsdatum:
1. März 2007

Beiträge: 19197

Hi.

Ich denke mal nicht, dass es sowas gibt. Schließlich kann man ja (als Debugger) nicht wissen, wie groß ein Array ist.

Darkstar999

(Themenstarter)
Avatar von Darkstar999

Anmeldungsdatum:
21. September 2008

Beiträge: 324

Naja laut meinem Prof soll Visual Studio das unter .... problemlos können!

Mfg darkstar999

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

Darkstar999 schrieb:

Naja laut meinem Prof soll Visual Studio das unter .... problemlos können!

Das geht schon, wenn der Debugger Verständnis für den Code entwickelt hat. Irgend wo muss man ja entweder eine statische Größe angegeben haben (foo[SIZE]) oder per malloc Speicher allozieren. Ob das die IDE wirklich kann, weiß ich natürlich nicht. Rein aus dem Zeiger alleine kann man das nicht herausfinden!

Darkstar999

(Themenstarter)
Avatar von Darkstar999

Anmeldungsdatum:
21. September 2008

Beiträge: 324

Lysander schrieb:

Darkstar999 schrieb:

Naja laut meinem Prof soll Visual Studio das unter .... problemlos können!

Das geht schon, wenn der Debugger Verständnis für den Code entwickelt hat. Irgend wo muss man ja entweder eine statische Größe angegeben haben (foo[SIZE]) oder per malloc Speicher allozieren. Ob das die IDE wirklich kann, weiß ich natürlich nicht. Rein aus dem Zeiger alleine kann man das nicht herausfinden!

Stimmt halbwegs

1
realloc

sorgt ja dafür das je nach Funktion und Größe der Speicher vergrößert wird.

somit hat man ja nur einen Zeitlichen Fixpunkt!

Panke

Anmeldungsdatum:
14. Oktober 2010

Beiträge: 133

Andererseits kann man als Debugger ja auch einfach anbieten, die nächsten x Elemente auch anzuzeigen. Der Benutzer hat dann halt x anzugeben. Nutzt man C++, so muss der Compiler aber auch irgendwo die Größe aller Arrays ablegen für den Operator delete[].

Darkstar999

(Themenstarter)
Avatar von Darkstar999

Anmeldungsdatum:
21. September 2008

Beiträge: 324

Panke schrieb:

Andererseits kann man als Debugger ja auch einfach anbieten, die nächsten x Elemente auch anzuzeigen. Der Benutzer hat dann halt x anzugeben. Nutzt man C++, so muss der Compiler aber auch irgendwo die Größe aller Arrays ablegen für den Operator delete[].

Das mit dem x ist nen guter Wink. Bei Netbeans ist es möglich <Enter new Watch> da dann u[x] für u an der x.ten Stelle. Allerdings müsste er das doch registrieren wen das Array von Strukturen gefüllt wird und dieses dann in einem gesamten angeben.

Mfg darkstar999

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

Darkstar999 schrieb:

Allerdings müsste er das doch registrieren wen das Array von Strukturen gefüllt wird und dieses dann in einem gesamten angeben.

Vorschlag: Versuche mal ein Tool zu bauen, welches genau das kann 😉 Du wirst schnell feststellen, dass das sicherlich nicht trivial ist.

Darkstar999

(Themenstarter)
Avatar von Darkstar999

Anmeldungsdatum:
21. September 2008

Beiträge: 324

Lysander schrieb:

Darkstar999 schrieb:

Allerdings müsste er das doch registrieren wen das Array von Strukturen gefüllt wird und dieses dann in einem gesamten angeben.

Vorschlag: Versuche mal ein Tool zu bauen, welches genau das kann 😉 Du wirst schnell feststellen, dass das sicherlich nicht trivial ist.

Hehe das ist mir auch klar! es ging ja darum ob es so-was schon gibt !

Mfg Darkstar999

Streamstormer

Avatar von Streamstormer

Anmeldungsdatum:
1. Februar 2010

Beiträge: 441

Hallo Darkstar999,

CodeBlocks kann das, was du willst, solang du ihm während des debuggen genau angibst, wie groß das Array gerade ist. Bei anderen Strukturen hat er aber noch seine Schwirigkeiten besonders bei pointer auf pointer einer Struktur lässt GDB sich leicht verwirren, aber für dich sollte es ausreichen.

Sieh die Screenshots. Du musst GDB sagen das es sich um ein Array handelt den Startpunkt und wie viele Objekte sich gerade im Array befinden. Dabei ist es egal ob es ein dynamisches Array oder ein Statisches Array ist,solang du die Größe weißt!

Gruß

Streamstormer

Bilder

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

Mit Eclipse schaue ich, allerdings beim Javaprogrammieren, schon seit Urzeiten in Arrays hinein.

Vielleicht musst Du die im Debugfenster einfach auffalten. Ich weiß nicht ob das ähnlich gestaltet ist, für C.

Darkstar999

(Themenstarter)
Avatar von Darkstar999

Anmeldungsdatum:
21. September 2008

Beiträge: 324

user unknown schrieb:

Mit Eclipse schaue ich, allerdings beim Javaprogrammieren, schon seit Urzeiten in Arrays hinein.

Vielleicht musst Du die im Debugfenster einfach auffalten. Ich weiß nicht ob das ähnlich gestaltet ist, für C.

Bitte richtig lesen Dynamische Array und Strukturen keine statischen Arrays !

Darkstar999

(Themenstarter)
Avatar von Darkstar999

Anmeldungsdatum:
21. September 2008

Beiträge: 324

Streamstormer schrieb:

Hallo Darkstar999,

CodeBlocks kann das, was du willst, solang du ihm während des debuggen genau angibst, wie groß das Array gerade ist. Bei anderen Strukturen hat er aber noch seine Schwirigkeiten besonders bei pointer auf pointer einer Struktur lässt GDB sich leicht verwirren, aber für dich sollte es ausreichen.

Sieh die Screenshots. Du musst GDB sagen das es sich um ein Array handelt den Startpunkt und wie viele Objekte sich gerade im Array befinden. Dabei ist es egal ob es ein dynamisches Array oder ein Statisches Array ist,solang du die Größe weißt!

Gruß

Streamstormer

ja funzt das Problem ist nur das ich das Array mit realloc wenn nötig vergrößre dann muss ich das ja immer umstellen oder ?

Streamstormer

Avatar von Streamstormer

Anmeldungsdatum:
1. Februar 2010

Beiträge: 441

Darkstar999 schrieb:

ja funzt das Problem ist nur das ich das Array mit realloc wenn nötig vergrößre dann muss ich das ja immer umstellen oder ?

Theoretisch schon aber warum solltest du nach jedem Realloc das überprüfen. Es reicht doch wenn du das Array am Ende deines Einlese Prozesses oder bevor du es weiter bearbeitest überprüfst.

Wenn du das unbedingt trotzdem machen willst und ständig reinschauen willst kannst du ja gdb angeben das das array rießig groß ist z.B 1000. Dann sollte dann sowas stehen wie:

pointer =[1,2,3,4,5,12236,0 <repeats 994 times>]
len= 4;

An den Stellen wo noch nichts drin ist steht entweder Speichermüll oder eine 0.

Gruß

Streamstormer

Darkstar999

(Themenstarter)
Avatar von Darkstar999

Anmeldungsdatum:
21. September 2008

Beiträge: 324

Streamstormer schrieb:

Darkstar999 schrieb:

ja funzt das Problem ist nur das ich das Array mit realloc wenn nötig vergrößre dann muss ich das ja immer umstellen oder ?

Theoretisch schon aber warum solltest du nach jedem Realloc das überprüfen. Es reicht doch wenn du das Array am Ende deines Einlese Prozesses oder bevor du es weiter bearbeitest überprüfst.

Wenn du das unbedingt trotzdem machen willst und ständig reinschauen willst kannst du ja gdb angeben das das array rießig groß ist z.B 1000. Dann sollte dann sowas stehen wie:

pointer =[1,2,3,4,5,12236,0 <repeats 994 times>]
len= 4;

An den Stellen wo noch nichts drin ist steht entweder Speichermüll oder eine 0.

Gruß

Streamstormer

Jep danke das geht !

Antworten |