У меня есть следующий минимальный пример, где моя основная функция вызывает две разные функции function1()
и function2()
.Они оба хотят работать с таблицей, которую необходимо сгенерировать при первом запуске function1()
.В моей реальной программе таблица намного больше, поэтому я не хочу, чтобы она была жестко запрограммирована в памяти программы как глобальная переменная, а вычислялась в первом раунде кода.Я объявил таблицу статической, так что она сохраняет назначенные значения при выходе из функций.Я не уверен, должен ли tblPtr
быть static
тоже.Почему я получаю SEGFAULT здесь?
#include <stdio.h>
static void genTbl(unsigned int encodeTbl[][2])
{
int nn,mm;
for (nn=0; nn < 3;nn++){
for (mm=0; mm < 2; mm++){
encodeTbl[nn][mm] = nn+mm; //some example
}
}
}
unsigned int **tblPtr; //pointer to table
static unsigned int function1()
{
static int t1=0;
static unsigned int tbl[3][2];
if(t1==0){ //only gen table in first round
t1++;
genTbl(tbl);
tblPtr = &tbl; //assign pointer
t1++;
}
return (tbl[2][2]);
}
static unsigned int function2()
{
//also wants to work with tbl
return (tblPtr[2][2]); //SEGFAULT
}
int main()
{
int cnt=0;
while(cnt<5){
int f1 = function1();
printf("function1 return: %d\n", f1);
int f2 = function2();
printf("function1 return: %d\n", f2);
cnt++;
}
}