J'ai une fonction qui devrait modifier un tableau (de flottants) dans la fonction parente d'origine. Je suis en utilisant le code suivant:C - passage d'un tableau par référence - seul ensemble d'éléments
void sortFunction(Word**words, int wordCount){ //to sure if two * are correct (pointer to an array..?)
int i = 0;
for(i=0;i<wordCount-1;i++){
Word first = *words[i]; //values fine
Word second = *words[i+1]; //weird values, causes segfault
if(first.data[0] > second.data[0]){
//do stuff
}
}
}
int main(int argc, char ** argv){
Word* words = NULL;
int wordsCount = ...
//filling the array in a loop and using realloc for memory allocation
//Here, the array is filled correctly (verified)
sortFunction(&words, wordsCount);
}
Où Word
est un typedef struct et Word.data
est le tableau de flotteur (dynamique). Lors de l'archivage de la fonction parente, le tableau est alloué et les valeurs définies correctement.
J'ai essayé avec environ 10 éléments dans le tableau, mais toujours seul le premier ([0]) élément est bien dans le sortFunction()
, deuxième et tous les autres sont foiré. J'ai aussi une propriété int
dans la structure, et quand j'essaie de l'imprimer pour le second élément, je reçois quelque chose de plus de 1 milliard. Je suppose que je ne passe pas correctement le tableau - j'utilise le code suivant (juste un échantillon) pour passer des variables régulières, donc j'ai essayé de le modifier pour un tableau, mais apparemment, pas correctement. Quelle est la bonne façon de le faire pour un tableau?
void foo(int*var){
*var=8;
}
int main(){
int var = 5;
changeVar(&var);
}
Merci d'avance pour tout conseils!
Lecture par ex. [cette table de priorité d'opérateur] (http://en.cppreference.com/w/c/language/operator_precedence) et le problème devrait être évident. –
@Someprogrammerdude Tristement pas:/Je pense (comme je le pensais avant), que ça a quelque chose à voir avec la partie "Mots de mots"? –
Non, pas cette partie, mais la partie '* words [i]'. Le compilateur le traite comme '* (mots [i])' ce qui est faux. –