I hat diese int
Array in C und initialisiert es mit 0 wie folgt -Array Initialisierung mit 0 in C
int f[10000] = {0};
Mein Programm mir verlangt diese Anordnung am Ende der Schleife reinitialisieren. Also, ich habe diesen Schritt ausgeführt -
f[10000] = 0;
Aber das hat nicht funktioniert. Ich versuchte sogar
f[10000] = {0};
, aber Fehler in ihm auch. Letztendlich musste ich memset
verwenden. Kann jemand helfen, wo der Fehler auftritt und warum?
EXTRA INFO - I USED ideone.com FÜR EINEN BESTIMMTEN ZWECK CODING
Für die Referenz, hier ist der komplette Code -
#include <stdio.h>
int main(void) {
int t, n, k, f[10000] = {0}, c[10000] = {0}, i, v, count = 0;
scanf("%d", &t);
while (t--) {
scanf("%d %d", &n, &k);
for (i = 1; i <= n; i++) {
scanf("%d", &v);
if (v == i) {
f[i] = 1;
}
c[v]++;
}
for (i = 1; i <= n; i++) {
if (!f[i] && c[i] >= k) {
count++;
}
}
printf("%d\n", count);
count = 0;
memset(f, 0, 10000);
memset(c, 0, 10000);
//f[10000] = 0; this didn't worked
//c[10000] = 0; this didn't worked
}
return 0;
}
Arrays werden auf Null basierende in C: F [10000] = 0; Überläuft das Array. Der maximale Array-Index beträgt in Ihrem Fall 9999. Außerdem beginnt Ihr Schleifenzähler bei eins und Sie werden immer über das erste Array-Element gehen. Außerdem könnte Ihr Schleifenzähler versuchen, auf ein Array-Element außerhalb der Grenzen zuzugreifen.memset sollte funktionieren –
@ clarasoft-it "memset" wird nicht ordnungsgemäß funktionieren, da es die Größe des Datenelements nicht berücksichtigt. –
@ Weather-Vane ja, du hast Recht !!! sollte 10000 * sizeof (int) verwenden. Danke für das Aufzeigen :-) –