Dynam. Array zeigt Visual Studio nicht als solches an.
-
wie meinst du das?
Ist doch ein dynamisches Array. Man kann ja auch ganz normal, wie auf jedes Array drauf zugreifen. Nur macht es keinen Spaß damit zu programmieren, wenn man beim Debuggen nicht den Arrayinhalt sieht.
Andere Entwicklungsumgebungen zeigen den Inhalt problemlos an.
-
Es ist kein Array, sondern ein Speicherbereich.
Aber da gehen wir in die pedantische Richtung.
Argument für meine Ausdrucksweise:char *p = malloc(1);
Da hab ich ein einziges Byte, das kann niemals ein Array sein, oder?
Seit C99 assoziieren wir dynamsches Array eher mit sowas:
int i = (int)clock(); char p[i];
-
dlgig2 schrieb:
wie meinst du das?
Ist doch ein dynamisches Array. Man kann ja auch ganz normal, wie auf jedes Array drauf zugreifen. Nur macht es keinen Spaß damit zu programmieren, wenn man beim Debuggen nicht den Arrayinhalt sieht.
Andere Entwicklungsumgebungen zeigen den Inhalt problemlos an.
-
das ist so wie mit dem teilchen/welle-dualismus.
-
dlgig2 schrieb:
Andere Entwicklungsumgebungen zeigen den Inhalt problemlos an.
ja, manche debugger zeigen den speicherbereich, auf den ein pointer zeigt, fortlaufend an. beim msvc-debugger könntest du z.b. ein memory-window aufmachen, '*dein_pointer' eingeben und die ansicht auf 'int' schalten.
-
-
im watchfenster, kannst du die anzeige als array erzwingen, indem du hinter den pointer-ausdruck ein ",x" schreibst, wobei x, die anzahl der anzuzeigenden Elemente ist.
also zB
arr, 10
zeigt arr an, als wärs ein array mit 10 elementen.
-
flamer schrieb:
Es ist kein Array, sondern ein Speicherbereich.
Aber da gehen wir in die pedantische Richtung.
Argument für meine Ausdrucksweise:char *p = malloc(1);
Da hab ich ein einziges Byte, das kann niemals ein Array sein, oder?
Seit C99 assoziieren wir dynamsches Array eher mit sowas:
int i = (int)clock(); char p[i];
Siehe Titel. Visual Studio kennt AFAIK kein C99
-
flamer schrieb:
char *p = malloc(1);
Da hab ich ein einziges Byte, das kann niemals ein Array sein, oder?
Ist das hier:
char p[1];
dann auch kein Array?
-
dann auch kein Array?
Davor hab ich mich schon gefürchtet.
Keine Ahnung...
-
Belli schrieb:
char p[1];
dann auch kein Array?
doch, ist es. die eckigen klammern machen es zum array, nicht die zahl die darin steht.
-
flamer schrieb:
Davor hab ich mich schon gefürchtet.
lol
-
Mein GCC frisst sogar folgendes:
char arr[0];
Darf er das, so ganz ohne Warnung (auf dem höchsten Warnlevel)?
-
bgdnoy schrieb:
Mein GCC frisst sogar folgendes:
das ist bestimmt ein bug. setz doch mal eine negative zahl oder eine fliesskommazahl ein.
-
fricky schrieb:
das ist bestimmt ein bug.
Scheinbar...
char arr[-1];
Beim Compilen:
main.c: In function `main': main.c:8: error: size of array `arr' is negative main.c:8: warning: unused variable `arr' ...
Aber:
char arr[0];
Beim Compilen:
main.c: In function `main': main.c:8: warning: unused variable `arr' ...
Seltsam, oder?
-
dann benutz doch mal das 0-array. was mach der blöde gcc mit:
int arr[0]; arr[0] = irgendwas;
^^sollte schiefgehen, weil das array ja keine elemente hat.
-
Ich bin mir nicht sicher, ob der blöde gcc da meckert.
Oder würde erint arr[5]; arr [5] = 1;
auch anmeckern?
-
Belli schrieb:
Ich bin mir nicht sicher, ob der blöde gcc da meckert.
Oder würde erint arr[5]; arr [5] = 1;
auch anmeckern?
nein, ein compilefehler gibt's hier nicht, aber ich nehme an, einen 'off-by-one' fehler, der zur laufzeit passiert bei:
int a[0]; a[0] =1;
-
char vorher[8]; char arr[0]; char nachher[8]; arr[0] = 42; printf("%d\n", arr[0]); printf("vorher: %d, arr: %d, nachher: %d", vorher, arr, nachher);
Geht durch, ohne Warnungen wegen arr.
Ausgabe:42 vorher: 2293608, arr: 2293584, nachher: 2293576
Bin aber gerade draufgekommen, daß auf meiner Windows-Kiste der Compiler schon 4 Jahre alt ist...
Das ist noch der von Dev-Cpp: gcc (GCC) 3.4.2 (mingw-special)
Werd mal nachsehen, was ein neuerer dazu sagt...
-
ich habs grad mal auf 'nem 1/2 jahr alten linux/debian probiert. das programm schmiert ab (bus error).