Falscher pointer ?!?
hallo,
mir ist ein problem mit pointer in die quere gekommen, das ich nicht alleine zu lösen vermag x| es entzieht sich irgendwie meiner logik, da meine funktion anscheinend auf einen falschen pointer zugreift, obwohl ich ihr genau sage, welchen sie zu benutzen hat.
ich versuche mal, meinen code zusammenzufassen:
folgende zeilen möchte ich nun 2 mal hintereinander ausführen. die funktion wird beim klicken auf einen button aufgerufen:
in filetypification passiert nur folgendes:
beim ersten aufruf klappt alles. der pfad aus sel wird in pdateien->path gespeichert und angezeigt. doch beim 2. aufruf tritt folgender fehler auf: plötzlich wird der neue dateipfad in pdateien[1]->path und pdateien->path geschrieben, er soll jedoch nur in pdateien[1]->path. ich übergeben filetypification doch absichtlich pdateien[max_titel], wobei max_titel beim 2. aufruf doch auf 1 stehen sollte oO
deshalb wende ich mich an euch. findet jemand meinen logik-fehler?
gruß
martin
mir ist ein problem mit pointer in die quere gekommen, das ich nicht alleine zu lösen vermag x| es entzieht sich irgendwie meiner logik, da meine funktion anscheinend auf einen falschen pointer zugreift, obwohl ich ihr genau sage, welchen sie zu benutzen hat.
ich versuche mal, meinen code zusammenzufassen:
typedef struct
{
char *path;
char *title;
char *artist;
char *album;
int year;
char *comment;
int track;
char *genre;
int bitrate;
int sample_rate;
int channels;
int length;
} sFile;
int max_titel = 0;
sFile *pdateien[1000];
folgende zeilen möchte ich nun 2 mal hintereinander ausführen. die funktion wird beim klicken auf einen button aufgerufen:
pdateien[max_titel] = malloc(sizeof(sFile)); /* neuer pointer auf neue struktur */
filetypification(sel, pdateien[max_titel]); /* struktur mit inhalt füllen. sel ist der pfad zur ausgewählten datei */
max_titel++;
printf("\n\npfad: %s\n",(char*)pdateien->path);
if(max_titel == 2)
{
printf("\n\npfad: %s\n",(char*)pdateien[1]->path);
}
in filetypification passiert nur folgendes:
int filetypification(char *pfad, sFile *pointer)
{
pointer->path = pfad;
return 0;
}
beim ersten aufruf klappt alles. der pfad aus sel wird in pdateien->path gespeichert und angezeigt. doch beim 2. aufruf tritt folgender fehler auf: plötzlich wird der neue dateipfad in pdateien[1]->path und pdateien->path geschrieben, er soll jedoch nur in pdateien[1]->path. ich übergeben filetypification doch absichtlich pdateien[max_titel], wobei max_titel beim 2. aufruf doch auf 1 stehen sollte oO
deshalb wende ich mich an euch. findet jemand meinen logik-fehler?
gruß
martin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 134313
Url: https://administrator.de/forum/falscher-pointer-134313.html
Ausgedruckt am: 23.12.2024 um 13:12 Uhr
6 Kommentare
Neuester Kommentar
Müsste eher etwas in der Art sein:
Gruß Dieter
struct sFile {
....
....
} *pdateien;
pdateien = (sFile *) malloc(sizeof (struct sFile) * 1000);
.... //füllen
printf("\n\npfad: %s\n", pdateien.path);
Gruß Dieter
Hallo inspire!
Der Code von filetypification(..) funktioniert so nicht.
Ich habe schon seit über 10 Jahre nix mehr in C gemacht, aber probier mal zum Einlesen was in dieser Art:
Gruß Dieter
PS. Bei pdateien immer eine Datensatznummer in der Form pdateien bis pdateien[999] angeben.
Eine Datensatznummer beinhaltet immer einen ganzen Datensatz der Größe von Structur sFile
Der Code von filetypification(..) funktioniert so nicht.
Ich habe schon seit über 10 Jahre nix mehr in C gemacht, aber probier mal zum Einlesen was in dieser Art:
char path = "C:\\Test.Dat";
int handle;
handle = open (path, Flags);
read (handle, &pdateien[5], sizeof (struct sFile)); // Eine Datei mit einem Datensatz einlesen
read (handle, pdateien, sizeof (struct sFile) * 1000); // Eine Datei mit allen Datensätzen einlesen
close (handle);
Gruß Dieter
PS. Bei pdateien immer eine Datensatznummer in der Form pdateien bis pdateien[999] angeben.
Eine Datensatznummer beinhaltet immer einen ganzen Datensatz der Größe von Structur sFile
Hallo inspire!
Da habe ich wohl falsche Schlüsse gezogen. Dachte Du wolltest letztenendes Datensätze aus Dateien Einlesen
Aber, ich merke gerade, dass ich einen Denkfehler hatte, weil Du ja nur Pointer in der Struktur hast. Also vergiss das mit dem Datei einlesen wieder, weil ja nur Adressen eingetragen werden.
Am Anfang habe ich Deinen Code so verstanden, das Du 1000 Datensätze ala Struktur sFile anlegen willst?
D.h. beim direkten Umgang mit pdateien muss eine Datensatznummer angegeben werden, also 1. Datensatz = pdateien mit Größe Struct usw. In der Variablen path als pdateien.path wird nur die Adresse des Strings von "Path" gesichert und ist somit nur ein Pointer.
Und wenn ich nicht ganz falsch liege müsste es so hinkommen (?):
Sicher bin ich mir jetzt aber auch nicht. Ist halt schon lange her und testen geht auch nicht, also ???
Hoffe, dass es Dir zumindest ein wenig weiterhilft
Gruß Dieter
Da habe ich wohl falsche Schlüsse gezogen. Dachte Du wolltest letztenendes Datensätze aus Dateien Einlesen
Aber, ich merke gerade, dass ich einen Denkfehler hatte, weil Du ja nur Pointer in der Struktur hast. Also vergiss das mit dem Datei einlesen wieder, weil ja nur Adressen eingetragen werden.
Am Anfang habe ich Deinen Code so verstanden, das Du 1000 Datensätze ala Struktur sFile anlegen willst?
D.h. beim direkten Umgang mit pdateien muss eine Datensatznummer angegeben werden, also 1. Datensatz = pdateien mit Größe Struct usw. In der Variablen path als pdateien.path wird nur die Adresse des Strings von "Path" gesichert und ist somit nur ein Pointer.
Und wenn ich nicht ganz falsch liege müsste es so hinkommen (?):
Char MyPath = "C:\\Test"
filetypification(&MyPath, &pdateien.path);
printf("%s", pdateien.path); // nach Rückkehr sollte das auch gehen
....
int filetypification(char *pfad, char *pointer)
{
pointer = pfad;
printf("%s",pointer);
}
Hoffe, dass es Dir zumindest ein wenig weiterhilft
Gruß Dieter