Wie man statische Variablen innerhalb einer Funktion zurücksetzt

Gibt es eine Möglichkeit, in einer Funktion als statisch deklarierte Variablen zurückzusetzen? Das Ziel ist es sicherzustellen, dass die Funktion nicht mit bleibenden Werten eines nicht verwandten Aufrufs aufgerufen wird. Zum Beispiel habe ich eine Funktion, die Spalten einer Matrix bearbeitet.

int foo(matrix *A, int colnum, int rownum){
static int whichColumn;
static int *v; //vector of length A->nrows 
   if (column != whichColumn){
    memset(v,0,size);
    whichColumn = which;
   } 
   //do other things
}

Die Funktion wird n-mal einmal für jede Spalte aufgerufen. Ist dies eine geeignete Methode zum "Zurücksetzen" der statischen Variablen? Gibt es andere allgemeine narrensichere Möglichkeiten zum Zurücksetzen statischer Variablen? Ich möchte zum Beispiel sicherstellen, dass, wenn der Aufruf mit einer neuen Matrix mit möglicherweise unterschiedlichen Dimensionen erfolgt, die Größe des Vektors v geändert und auf Null gesetzt wird usw. Am einfachsten erscheint es, die Funktion mit einem NULL-Zeiger aufzurufen:

int foo(matrix *A, int colnum, int rownum){
static int whichColumn;
static int *v; //vector of length A->nrows 
   if (A == NULL){
    FREE(v);
    whichColumn = 0;
   } 
   //do other things
}

Antworten auf die Frage(10)

Ihre Antwort auf die Frage