C Arrey,Funktion Frage!

Flasche

Cadet 2nd Year
Registriert
März 2014
Beiträge
20
Hallo...
ich hätte da eine Frage... warum funktioniert mein Programm wenn ich den arrey x[2000] stelle... und wenn ich x[1000] stelle funktioniert nichts nicht... jemand ne logische Erklärung für mich parat?
Code:
 #include<stdio.h>
 #include<stdlib.h>



 int read_ints(int a[], int dim)
 {
     int i;
     for (i=1;i<dim;i++)
    {
    printf("a[%d]:",i);
    scanf("%d", &a[i]);


        if (a[i] == 0)
        {
            printf("Programm wird beendet!!!!!\n");
            break;
        }
    }
}

int main()
{
int x[2000];
int d;
printf("dim?");
scanf("%d",&d);

read_ints(x,d);

}
 
Erstens: Was soll das Programm denn können?
Zweitens: Hast du entweder ein return bei deiner Funktion vergessen oder du wolltest "void" haben.
Drittens: Was heißt "funktioniert nichts nicht"? Bei mir kompiliert es, ich kann es ausführen, und es tut irgendwas.
Viertens: Was hast für eine Umgebung (Windows? (32,64 Bit ?), MAC?, Linux??; VisualStudio?,Eclipse??? ...)
@Stype: Doch, das macht er mit scanf.
 
Ich verwende Code-Blocks mit Standard-Compiler, und dein Programm funktioniert einwandfrei bei mir. Was genau funktioniert nicht bei dir?
 
Wird wohl aufs selbe rauslaufen wie bei seinem letzten Thread:
asdfman schrieb:
Hancock: Du verstehst ihn falsch. Hättest du mal den Thread aufmerksam gelesen, wüsstest du, dass hier mit "Hilfestellung" die weniger geläufige Bedeutung "Mir schnell die Lösung geben" gemeint ist.

Nur dass es diesmal nicht einmal eine endeutige Fragestellung gibt . . . ..
 
Wunderkind schrieb:
Ich verwende Code-Blocks mit Standard-Compiler, und dein Programm funktioniert einwandfrei bei mir. Was genau funktioniert nicht bei dir?

jop ich bin auch auf Code-blocks...
funktioniert auch alles bestens...
nur wenn ich den xarray auf 1000 ändere... erkennt er mir
if (a[d]== 0);
nicht mehr...
Ergänzung ()

Nai schrieb:
Wird wohl aufs selbe rauslaufen wie bei seinem letzten Thread:


Nur dass es diesmal nicht einmal eine endeutige Fragestellung gibt . . . ..

jaja... einfach programm mal selbst ausführen... x array ändern dann sieht man schon !


ps ... ist dieses FOrum hier nur für fortgeschrittene? denn wenn ich als einsteiger probleme habe heißts dann eh nur ich hätte selber leicht darauf kommen können, "mit ein bisschen einsatz" !... ja sagt mal ist das nicht bei den meisten Problemen der Fall?
 
Zuletzt bearbeitet:
Also bei mir funktioniert es. Egal ob mit 1000 oder mit 2000. aber du musst schon "a == 0" abfragen...
 
ok nochmals... ich gebe dim= 12 ein... in diesem fall wie viele zahlen ich eingeben will
dann ein paar zahlen...
und abbrechen wenn ich einen buchstaben eingeben will...
buchstabe -> "programm wird beendet!" bei X[2000]
buchstabe ->a[5],a[6],.... biei X[1000]...
und dieses bei Buchstabe beenden funktioniert bei mir mit X1000 nicht...

syr für die umständliche Fragestellung

also einfach eine dimension angeben und dann mit buchstaben beenden...

also soviel ich verstehe gibt "int x[1000]" bzw"int x[2000]" nur an wieviele plätze ich anlegen will... keine ahung warum es mir auch buchstaben einmal als Zahl abspeichet und einmal nicht... sozusagen...
 
Zuletzt bearbeitet:
1.Schritt: Das ganze mit Breakpoints zupflastern dann im Debugger starten und schauen wie sich die Werte verändern und den Fehler selbst finden.
2. Schritt nach dem absolutem Fehlschlag des ersten Schritts: Im Forum Posten und dabei sagen was genau nicht funktioniert. Den Hinweis bekommst du sogar bei jeder Themenerstellung hier im Forum :). Bekommst du eine Fehlermeldung wie Speicherschutzverletzung, kompiliert es nur nicht, bekommst du die falschen Ausgaben?


buchstabe -> "programm wird beendet!" bei X[2000]
buchstabe ->a[5],a[6],.... biei X[1000]...

Speicherschutzverletzung? Array Indexierung geht bei CPP mit 0 los. Deshalb wenn du das Array bei 2000 indexierst, frägst du den 2001ten Eintrag ab. Da dein Array aber nur 2000 Einträge besitzt kann das nicht hinhauen.

Auch ist es suboptimal, dass deine Forschleife bei i = 1 das iterieren anfängt und nicht bei i = 0. Aber in deiner Forschleife scheint die Speicherschutzverletzung nicht auftreten zu können, da du nur bis i < dim bzw i < 2000 iterierst.
 
Zuletzt bearbeitet:
Nai schrieb:
1.Schritt: Das ganze mit Breakpoints zupflastern dann im Debugger starten und schauen wie sich die Werte verändern und den Fehler selbst finden.

alles zugepflastert... und fehler bei int X[1000] gefunden..

... nur warum das so ist, ist ja die Frage!

oder hab ich etwa einen BUG bei codeblocks endeckt:D

ohh... gosh... mit cygwin funktionierts mit beiden Arraygrößen... scheint mir wirklich so als ob ich einen "BUG" bei CODE-BLOCKS entdeckt habe!
 
Zuletzt bearbeitet:
ohh... gosh... mit cygwin funktionierts mit beiden Arraygrößen... scheint mir wirklich so als ob ich einen "BUG" bei CODE-BLOCKS entdeckt habe!

Das schreit förmlich nach Speicherschutzverletzung. Denn ob eine bei einer fehlerhaftan Array Indexierung auftritt ist stark davon abhängig wie der Compiler die Variablen anordnet.
 
Kurzum: Du darfst bei scanf("%d", &var) keine Buchstaben eingeben, ein Buchstabe bedeutet auch nicht, dass dann 0 eingetragen wird, das ist schlicht nicht standardkonform und einfach falsch.
 
Kurzum: Du darfst bei scanf("%d", &var) keine Buchstaben eingeben, ein Buchstabe bedeutet auch nicht, dass dann 0 eingetragen wird, das ist schlicht nicht standardkonform und einfach falsch.

Ajo stimmt du hast recht, da muss ich mich Entschuldigen, dass ich Mist geschrieben habe. Ich habe da irgendwie etwas falsch verstanden (eventuell habe ich auch frühere Versionen seines Posts gelesen, wo das noch nicht so klar war und in Erinnerung behalten) was der Autor machen will.
 
Sag mal, (du) Flasche, wie oft muß ich dir eigentlich noch erklären, daß eine Funtion, die mit Rückgabetyp int definiert ist, dann aber nichts zurückgibt, nicht Teil eines wohlgeformten C-Programms sein kann. Behebe das endlich mal.

Und außerdem, welchen Wert gibst du denn bei der "dim?"-Abfrage ein?
Ergänzung ()

Flasche schrieb:
ok nochmals... ich gebe dim= 12 ein... in diesem fall wie viele zahlen ich eingeben will
dann ein paar zahlen...
und abbrechen wenn ich einen buchstaben eingeben will...
buchstabe -> "programm wird beendet!" bei X[2000]
buchstabe ->a[5],a[6],.... biei X[1000]...
und dieses bei Buchstabe beenden funktioniert bei mir mit X1000 nicht...

Schau dir bitte deinen alten Thread noch mal an. Da hatte ich dir klipp und klar gezeigt, wie du das korrekt tun kannst. -> https://www.computerbase.de/forum/threads/c-programmierung-hilfestellungen.1331307/#post-15473001
 
Zuletzt bearbeitet:
Zurück
Oben