Hallo ich ein sehr einfaches Programm vorgenommen habe, die funktionieren sollen, aber es nicht tun:Zwei fast genau die gleichen Programme, aber unterschiedlicher Ausgang
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(int argc, char *argv[]) {
int usedNumbers[256];
memset(usedNumbers,0,256);
srand(time(NULL));
for(int i=0; i<256; ++i){
while(1){
int r = rand()%256;
if(!usedNumbers[r]){
usedNumbers[r] = 1;
break;
}
printf("Test: %03d -> %03d\n", i, r);
}
}
return 0;
}
Die Idee des Programms ist es Zahlen drucken von 0 bis 255 auf der Bildschirm in der zufälligen Reihenfolge, aber das Programm stoppt auf 84. Nummer auf 32 Computern und 144. Nummer auf 64-Bit-Computern. Wenn ich nur die "int usedNumbers [256];" über der Funktion wie folgt:
#include <string.h>
int usedNumbers[256];
int main(int argc, char *argv[]) {
Programm funktioniert wie es soll. Warum ist das so? Ich verwende den neuesten GNU/GCC-Compiler und C11-Standard.
'memset (usedNumbers, 0,256);' sollte 'memset sein (usedNumbers, 0, sizeof (usedNumbers));' – BLUEPIXY
Die 'size' für' memset() 'ist in Bytes - weiß nicht wie groß sind Ihre Array-Elemente. – Dmitri
Wenn Sie 'usedNumbers' so verschieben, dass es global wird, wird es standardmäßig auf Null gesetzt. Ihre 'memset()' setzt nur den ersten Teil (1/4 davon, mit 4-Byte 'int'). – Dmitri