Probleme mit atoi(argv[1]) und free(a)
-
Das argv[1] ist der 1. Parameter beim Aufruf über die Kommandozeile.
Deswegen ist deinprintf("Bitte geben sie die Dimension ein:\n");
sinnlos, da du zu dem Zeitpunkt den Wert schon eingegeben haben musst.Wenn du da nichts angegeben hast, wird in argv[1] NULL drin stehen. Und das mag atoi nicht.
Darum solltest du auch überprüfen ob argc > 1 ist. Denn nur dann steht auch was in argv[1].
-
ok mit dem free(a) klappt jetzt alles -danke- allerdings weis ich nicht was da bei dem atoi innerhalb vor sich geht und habe daher auch keine ahnung wie ich das problem beheben kann.
Hab keine erfahrung mit c, bin grad dabei c++ zu lernen, deswegen weis ich nicht was da innerhalb vor sich geht
Kann mir jemand erklären, wie man mit atoi umgeht?
-
Wie rufst du das kompilierte Programm auf?
-
Habe es in eclipse und im terminal(grad eben) ausgeführt. In beiden Fällen zeigt er "Bitte geben sie die Dimension ein" an und beendet sich danach, auf der Konsole zusätzlich Speicherzugriffsfehler an.
Muss er den Parameter nicht von der Kommandozeile lesen, wird das Programm fehlerfrei ausgeführt
-
Das argv ist für Parameter von der Kommandozeile gedacht:
C:>matrixmul 3
Wenn du den Wert im Programm eingeben willst nimm statt
n = 3;//atoi(argv[1]);
scanf("%d",&n);
-
Danke mit scanf() funktionierts, in meiner aufgabenstellung ist aber explizit gefordert, dass ich mit atoi(argv[1]) den Parameter einlese
-
Das liegt daran, dass du keinen Komandozeilenparameter angibts. Denkst du Eclipse macht das automatisch fuer dich? Siehe DirkB.
-
wie gesagt, kenne mich nicht aus und weis daher nicht wie ich einen Kommandozeilen Parameter richtig anlege.
Ich arbeite auch erst seit kurzer Zeit mit LinuxMuss ich das irgendwie im Quelltext mit angeben oder bevor ich das Programm starte???
-
Nimm den Beitrag von dirkb:
DirkB schrieb:
Das argv ist für Parameter von der Kommandozeile gedacht:
C:>matrixmul 3
Oder unter Linux von der Shell aus dort wo das übersetzte Programm liegt ./matrixmul 3
Weiterhin beachte meinen Beitrag:
LordJaxom schrieb:
Schau mal, wieviele double* Du in Zeile 11 reservierst und vergleiche mit der Anzahl der Werte, die Du in der darauffolgenden Schleife in das Array reinpacken möchtest.
-
OK hab gefressen: <Pfad>/<Dateiname> <Parameter> // natürliche ohne < >
Es gibt keine andere Möglichkeit, mit atoi, dass er zuerst "Bitte geben sie die Dimension ein" ausgibt und dann der Parameter eingegeben wird,außer mit scanf(), oder???
-
Du kannst mit argc prüfen, wie viele Parameter übergeben wurden. Wenn weniger als 2 Übergeben werden (der erste ist der Programmname) gibst du halt einen Hilfetext aus ("usage: matrixmul <matrixsize>") oder fragst mit scanf nach.
-
Sollst du atoi() und argv[1] nehmen oder nur atoi()?