Probablement parce qu'il modifie cette variable
boblenain200 a écrit :
Ensuite, même si je crois que c'est plus utile avec un compilateur moderne, faudrait caster le retour du malloc en (double*).
|
Certainement pas !!! Ca masque les erreurs de programmation
Pas besoin. Le problème est visible comme le nez au milieu de la figure
Duc_onlajoy a écrit :
Je ne peux donc pas utiliser un "return" car je ne pourrais alors passer qu'un seul pointeur en retour. Y aurais-t-il une solution à mon problème?
|
Toujours.
Ta fonction reçoit un pointeur à allouer et l'alloue. Un peu schématiquement comme ceci
Code :
- void allocate(double *pointeur)
- {
- pointeur=malloc(n * sizeof(double));
- }
|
Et l'appel se fait schématiquement ainsi
Code :
- {
- double *tableau;
- allocate(tableau);
- ...
- free(tableau);
- }
|
Or, ne t'a-t-on pas appris qu'une fonction devant modifier une variable devait toujours recevoir l'adresse de cette variable ?
C'est valable que cette variable soit de type int
Code :
- void modif(int *pt)
- {
- *pt=125;
- }
- int n=10;
- modif(&n);
|
Ou bien de type float...
Code :
- void modif(float *pt)
- {
- *pt=125.17;
- }
- float n=10.0;
- modif(&n);
|
Ou bien de type "pointeur sur double"
Code :
- void allocate(double* *pt)
- {
- (*pt)=malloc(n * sizeof(double))
- }
- double *tab;
- allocate(&tab);
|
PS: me semble que Taz a déjà donné la soluce mais... en moins explicite.
Duc_onlajoy a écrit :
PS : le bouquin noir avec un carré jaune dessus nommé couramment K&R est à 20 centimètres de mon PC, et ouvert!
|
Est-il lu ???
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.