Vous avez trois problèmes ici. La première est triviale, vous renvoyez le premier élément du tableau avec return *array
, quand vous voulez dire que vous voulez renvoyer un pointeur vers le premier élément du tableau avec return array
. N'arrêtez pas ici! La seconde est que vous augmentez votre pointeur de 1, plutôt que par la taille des données que vous pointez. Cela vous donnera des résultats erronés. Le troisième problème est beaucoup plus grave:
Vous allouer de la mémoire pour votre tableau sur cette ligne:
void* array[array_size];
Cette mémoire est allouée sur la pile, et cette mémoire n'est alloué plus lorsque vous revenez de la fonction. Lorsque vous faites référence à la fin de cette mémoire avec la ligne:
int* a = (int*)list_to_array(list);
une pointe vers une région sur la pile qui n'est plus utilisé. Vous obtenez des résultats quelque peu raisonnables avec le code que vous avez, mais si vous modifiez la pile après le retour de votre fonction, un pointera sur la nouvelle mémoire.Par exemple, si vous utilisez le code suivant:
int* a = (int*)list_to_array(list1);
int* b = (int*)list_to_array(list2);
printf("%d" (int)a);
Vous (probablement) voir le premier élément de b. Ce n'est pas garanti - Vous pouvez également obtenir une erreur de segmentation. L'autre code entre l'affectation à a
et son utilisation écrasera également le contenu de la mémoire que vous avez accédé dans votre instruction printf.
Vous devez allouer votre mémoire avec la même portée que a. Le problème le moins grave est le fait que vous n'augmentez pas votre pointeur de la bonne quantité. Vous devez utiliser l'opérateur sizeof(). Alternativement, vous pouvez accéder à vos éléments de tableau avec [].
int* a = (int*)list_to_array(list, array);
printf("%d" a[1]); //Prints second element of a
a += sizeof(int) * 2;
printf("%d" (int)a); //Prints third element of a
vous retournez le premier élément du tableau uniquement. Sans connaître le reste de vos affaires, rien ne peut être dit (sauf que vous ne devriez même pas penser à renvoyer des pointeurs qui pointent vers des variables locales). –