Les pointeurs qualifiés de ressortingction m’ont été expliqués comme ayant une règle: Tout object auquel le pointeur a access et modifié n’importe où est uniquement accessible par le pointeur. Donc, ce qui suit ne fonctionne pas, non?
void agSum( int * ressortingct x, int n ){ for(int i=0; i<n-1; i++) x[i+1] += x[i]; } int SumAndFree( int * restrict y, int n ){ agSum(y); printf("%i",y[n-1]); free(y); }
Donc, je suppose que ceci n’est pas valide car y [n-1] est modifié quelque part non directement accessible depuis le pointeur restreint y, et il est lu par y.
Si cela est correct, comment pouvez-vous appeler des fonctions lorsque le pointeur d’entrée est qualifié restreint? Il semble que la fonction ne puisse rien faire sans violer la règle de ressortingction.
Est-ce une autre violation de libérer le pointeur de ressortingction? C’est une sorte de modification, je suppose.
Merci d’avance!
Votre code est correct. Lorsque SumAndFree
appelle agSum
, il passe un pointeur dérivé de y
. Ainsi, tous les access SumAndFree
sous le bloc du SumAndFree
de SumAndFree
sont effectués à l’aide de pointeurs dérivés de y
.
C’est bien d’appeler free
aussi.
Vos fonctions ne lisent ou n’écrivent que x
et y
, donc ressortingct
ne sert à rien dans ce cas précis.