Как сбросить статические переменные внутри функции

Есть ли способ сбросить переменные, объявленные как статические внутри функции? Цель состоит в том, чтобы убедиться, что функция не вызывается с длительными значениями из несвязанного вызова. Например, у меня есть функция, работающая над столбцами матрицы.

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
}

Функция вызывается n раз, по одному разу для каждого столбца. Это правильный способ «переустановки» статической переменной? Существуют ли другие общие надежные способы сброса статических переменных? Например, я хочу убедиться, что если вызов выполняется с новой матрицей, возможно, с другими размерами, то вектор v изменяется и обнуляется и т. Д. Кажется, что самый простой способ - вызвать функцию с указателем NULL:

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
}

Ответы на вопрос(5)

Ваш ответ на вопрос