Confondre les valeurs lors de la copie dans un autre tableau

J’essaie de copier les valeurs d’un tableau dans un autre en C. Le tableau d’origine est de type long int et il est entré dans la fonction sous la forme *pixel_frequency . Le tableau que je veux copier est temp et il s’agit d’un tableau 2D. Cependant, lorsque j’essaie de copier les valeurs, pixel_frequency convient, mais temp donne des résultats étranges. Vous trouverez ci-dessous le code correspondant et quelques exemples de sortie.

Code:

 struct node *generate_nodes(long int *pixel_frequency) { int i; int temp[max_value + 1][2]; for (i = 0; i < (max_value + 1); i++) { temp[i][0] = i; temp[i][1] = pixel_frequency[i]; printf("Frequency for %d is %d\n", temp[i][0], temp[i][1]); } ... 

Sortie (chaque fréquence est supposée être 256):

 Frequency for 0 is 150160 Frequency for 1 is 256 Frequency for 2 is 256 Frequency for 3 is 256 Frequency for 4 is 255 ... Frequency for 254 is 892677956 Frequency for 255 is 1868789101 

Vous trouverez ci-dessous un exemple de version de code utilisant votre extrait de code, le type de retour, etc.

Au lieu d’utiliser une variable globale pour la taille d’un tableau, vous pouvez le passer en tant qu’argument de fonction. Il sera donc facile d’identifier la taille du tableau que vous avez passé.

 void generate_nodes(long int *pixel_frequency, size_t size) { size_t i; long int temp[size][2]; for (i = 0; i < size; i++) { temp[i][0] = i; temp[i][1] = pixel_frequency[i]; printf("Frequency for %ld is %ld\n", temp[i][0], temp[i][1]); } } 

Si vous avez déclaré pixel_frequency tant que variable locale dans une fonction et utilisé l'adresse du tableau lorsque la variable est sortie de son champ d'application, le comportement sera indéfini.

 int main(void) { size_t max_len = 5000; size_t i; long int* pixel_frequency = malloc(max_len*sizeof(long int)); for( i = 0; i < max_len; ++i) { pixel_frequency[i] = (i%256); } generate_nodes(pixel_frequency, max_len); return 0; }