そのため、2 つの個別の関数で使用できるように、3 次元の整数配列をグローバルに宣言しようとしています。
最初に、私はこれを試しました(solns
3D配列の名前です):
static int*** solns;
しかし、トリプル ポインターsolns
は関数間で保持されますが、その中に配置する情報は保持されません。これにより、2 番目の関数が最初の関数が配置したデータにアクセスしようとすると、segfault が発生しますsolns
。
内部の情報が残るように、これをどのように宣言すればよいですか? 私はもう試した
static int solns[][][];
とりわけ、gccは私が試した他のものを好きではありません。
編集: 関数 1 のこのコード スニペットは、データを配列に配置します。
solns[k] = realloc(solns[k],sizeof(solns[k])/sizeof(int*)+sizeof(int*));
solns[k][l] = realloc(solns[k][l],sizeof(int)*4*sC);
for(i=0;i<sC*4;i++)
{
solns[k][l][i] = row[i];
}
l++;
このスニペットは、関数 2 がそのデータを読み取ろうとする場所です。
if(solns[i][j][m*4+1]!=solns[i+1][n][m*4+2])
break;
しかし、が指すデータは引き継がれないsolns[i]
ため、その時点では null ポインターです。solns