Array mit unbestimmter Größe erstellen
-
@Stelfer
Thou shalt not cast the return value of malloc. Zumal dein Cast falsch ist, "richtig" müsstest du nach int* casten.Korrekt wäre:
int* pArray = malloc(anzahl * sizeof(*pArray));
-
GPC schrieb:
Korrekt wäre:
int* pArray = malloc(anzahl * sizeof(*pArray));
einfacher und leichter verständlich wäre:
int* pArray = malloc(anzahl * sizeof(int));
-
#include <stdio.h> #include <stdlib.h> int main(void) { int *ptr; double *omg; int i, numbers; printf("Wieviel Zahlen wollen sie einlesen?\n"); scanf("%d",&numbers); ptr = (int*) malloc((sizeof(int))*numbers); if(ptr == NULL) { /* Falls nicht genug Speicherplatz vorhanden */ fprintf(stderr, "Fehler: Zuwenig Speicherplatz"); return EXIT_FAILURE; } for(i = 0; i < numbers; i++) scanf("%d",&ptr[i]); for(i = 0; i < numbers; i++) printf("%d\n",ptr[i]); return EXIT_SUCCESS; }
Bitte verbessern, falls etwas nicht stimmt.
-
das "double *omg;" gehört natürlich raus, hatte das nur zu testzwecken trinnen und vergessen wieder zu entfernen.
-
onoz schrieb:
Bitte verbessern
du hast 'malloc' gecastet
-
ten schrieb:
GPC schrieb:
Korrekt wäre:
int* pArray = malloc(anzahl * sizeof(*pArray));
einfacher und leichter verständlich wäre:
int* pArray = malloc(anzahl * sizeof(int));
Finde ich nicht. Dann muss man jedesmal alle mallocs ändern, wenn sich der Datentyp für pArray* ändert.
-
ten schrieb:
onoz schrieb:
Bitte verbessern
du hast 'malloc' gecastet
Wie meinst du es?
ptr = malloc((sizeof(*ptr))*numbers);
so? Wo liegt dort der große Vorteil, im Gegensatz zum casten wie ich es gemacht habe?
"Nur"d as man den Datentyp leichter ändern kann?
-
Mein lieber scholly, mit so vielen Antworten habe ich jetzt nicht gerechnet.
Vielen Dank an alle.
Ich muss mich erst mal durch den ganzen malloc und sizeof - Befehl durcharbeiten. Bis jetzt kannte ich diese Befehle gar nicht. Bin ja schließlich noch ein kleiner Anfänger.
Soweit so gut. Muss jetzt mal sehen wie ich das weiter in meiner ganzen Aufgabe weiterverwende, denn mein Bsp. war nur ein Teil davon. Wenn gut geht dann werde hier davon berichten falls nicht dann werde ich noch weiter Fragen.
Apley
-
Apley schrieb:
Ich muss mich erst mal durch den ganzen malloc und sizeof - Befehl durcharbeiten. Bis jetzt kannte ich diese Befehle gar nicht.
sizeof ist ein Schlüsselwort
malloc eine FunktionWTF ist ein Befehl? (in C...)
greetz, Swordfish
-
onoz schrieb:
ten schrieb:
onoz schrieb:
Bitte verbessern
du hast 'malloc' gecastet
Wie meinst du es?
onoz schrieb:
ptr = *(int)**malloc((sizeof(int))*numbers);
das (fett markierte) ist überflüssig und manchmal sogar eine fehlerquelle.
Swordfish schrieb:
WTF ist ein Befehl? (in C...)
z.b. 'goto'
-
ten schrieb:
Swordfish schrieb:
WTF ist ein Befehl? (in C...)
z.b. 'goto'
Ok, 1:0 für Dich. Ich sag immer Anweisung dazu.
greetz, Swordfish
-
Hallo zusammen,
also ich hab den Code getestet und erweitert und er läuft einwandfrei.
Deweiteren habe ich aber wieder ein Problem. Ich wollte es mir am Anfang leicht machen und zuerst alles in int einlesen und dann in char umwandeln. Denn es wird eigentlich das einlesen von Strings verlangt.
Leider bekomme ich das aber nicht so richitg hin. Meine Eingabe hört hier eigenlicht gar nicht mehr auf. Weiß auch nicht so recht woran es liegt.
int *pointer; int i; char numbers; printf("Bitte geben Sie die Ziffern an: \n"); scanf("%s", &numbers); printf("Bitte geben Sie die Ziffernreihenfolge ein: \n "); pointer = (int*) malloc((sizeof(char))*numbers); ..... scanf("%d", &pointer[i]);
-
Apley schrieb:
pointer = (int)* malloc((sizeof(char))*numbers);
-
Diagnose: Beratungsresistent(tm)
greetz, Swordfish
-
char numbers; scanf("%s", &numbers);
Kann auch nix geben. Kein Speicher für nen String und man ließt Strings nicht mit & aus.
-
Beratungsresistent ist weit her geholt, eher denn Wald vor lauter Bäumen nicht sehen zu können ist was anderes.
Als ich es gemerkt hatte war es schon zu spät. Schande über mein Haupt.
Jedoch wenn ich das gecastete int weglasse, dann funktioniert die malloc funktion bei mir nicht.
Und um ehrlich zu sein, weiß ich jetzt nicht so recht wie ich da weiter vorgehen soll. Hätte mal lieber direkt mit den char eingabe anfangen sollen.
Später soll die ganze aktuelle Void-main-Funktion in in eine einfach Funktion umgewandelt werden, so das ich dann aus meinem Main programm darauf zugreifen kann bzw. Werte da übergebe und daraus eine Print-ausgabe erfolgen soll.
Es hat nicht zufällig jemand lust mal einen blick über meine ganzen Programm einen Blick zu werfen oder?
Gruß
Apley
-
Apley schrieb:
Jedoch wenn ich das gecastete int weglasse, dann funktioniert die malloc funktion bei mir nicht.
das muss gehen.
welchen compiler benutzt du?Apley schrieb:
Es hat nicht zufällig jemand lust mal einen blick über meine ganzen Programm einen Blick zu werfen oder?
poste es doch hier...
-
Als compiler benutze ich Visual C++ Express Edition 2005.
denn code würde ich ja gerne hier reinposten, aber wenn das ein anderer Mitstreiter das sieht und es kopiert dann wäre ich im Arsch gekniffen, denn es würde dann nicht mehr bewertet werden.
Apley
-
Apley schrieb:
Als compiler benutze ich Visual C++ Express Edition 2005.
achso, dann hast du die quelltextdatei bestimmt .cpp genannt?
bennen sie um in .c, dann klappts...
-
Hintergrund ist der, dass der VC++ über die Dateiendung entscheidet ob er einen C oder einen C++ Compiler verwenden soll. In C++ bräuchte man den Cast, aber in C (und nur um C geht es hier) nicht.