Shadew | Sve@r a écrit :
2 problèmes
1) tu passes à ta fonction add_line la variable h_InputKey. Or cette fonction semble devoir modifier cette variable. T'as pas appris que quand une fonction doit modifier une variable il lui faut alors recevoir l'adresse de cette variable ?
2) tu utilises realloc sur h_inputKey. Or realloc ne fonctionne que s'il reçoit un pointeur correct, c.a.d soit à NULL (dans ce cas realloc fonctionne comme un malloc), soit déjà alloué via malloc ou realloc
Or h_inputKey n'ayant pas été initialisé, sa valeur est indéterminée.
|
Merci pour ton aide, j'ai essayé ce que tu me proposes, mais ça ne change rien :s Voici le code mis à jour :
Code :
- void add_line(uint *numLine, TTrio ***h_InputKey, const uint limit){
- (*numLine)++;
- *h_InputKey = (TTrio **)realloc(*h_InputKey, *numLine * sizeof(TTrio*));
- *h_InputKey[(*numLine)-1] = (TTrio *) malloc (limit*sizeof(TTrio));
- }
- int main(int argc, char** argv){
- TTrio **h_InputKey = NULL;
- const uint arrayLength = argc > 1 ? atoi(argv[1]) : 1048576 ;
- const uint limit = argc > 2 ? atoi(argv[2]) : 5;
- uint numLine = 0;
- for(uint i = 0; i<arrayLength;i++){
- if(i%limit == 0)
- add_line(&numLine, &h_InputKey,limit);
- h_InputKey[i/limit][i%limit].idx = i;
- h_InputKey[i/limit][i%limit].val = i;
- printf("TTrio CPU [%d][%d] : idx : %8x val : %8x \n", i/limit, i%limit, h_InputKey[i/limit][i%limit].idx, h_InputKey[i/limit][i%limit].val);
- }
- for(uint i = 0; i < numLine; i++){
- free(h_InputKey[i]);
- }
- free(h_InputKey);
- }
|
Si je met la fonction dans ma boucle, ça fonctionne, mais comme la fonction est amenée à grandir, j'aimerais pouvoir l'utiliser et ne pas la mettre dans la boucle. Je passerais mal le double pointeur ? Je n'arrive pas à trouver sur le net comment faire ce genre d'opération :s
EDIT : J'ai un peu debugger le programme, et je remarque qu'il plante à la ligne :
*h_InputKey[numLine-1] = (TTrio *) malloc (limit*sizeof(TTrio));
mais pas lors du premier passage, il remplit la première ligne, et lorsqu'il alloue la seconde ligne, il cale :s
Quand on y pense, realloc fonctionne comme un malloc si le premier argument est nul et réalloue de la mémoire si celui-ci est non nul. A mon avis, il y a un bug lors de la réallocation, mais je ne sais pas lequel :s Message édité par Shadew le 30-05-2010 à 23:46:38
|