メモリの割り当てと割り当て解除のために書いた 2 つの関数が機能するかどうかを確認するコードを書いていました。2つの機能は本質的に
int createBaseName(char ***imageName, char **groupName, char *name)
{
*imageName = calloc(BASELINEC, sizeof(char *)); //This is a 2D array (array of str)
*groupName = calloc(MINILINE, sizeof(char)); // This is a 1D array (just an str)
sprintf(*groupName, "%s_BGr.fbi", name);
for(bb = 0; bb < BASELINEC; bb++) {
(*imageName)[bb] = (char *)calloc(MINILINE, sizeof(char));
if (bb < 9)
sprintf((*imageName)[bb], "%s_BIm_00%d.fbi", name, bb+1);
else if (bb < 99)
sprintf((*imageName)[bb], "%s_BIm_0%d.fbi", name, bb+1);
else
sprintf((*imageName)[bb], "%s_BIm_%d.fbi", name, bb+1);
}
return 0;
}
と
int freeBaseName(char **imageName, char *groupName)
{
int bb;
for(bb = 0; bb < BASELINEC; bb++)
free(imageName[bb]);
free(imageName);
free(groupName);
return 0;
}
これらの 2 つの関数をチェックするために私が書いたプログラムで、誤って とcreateBaseName
をfreeBaseName
次々に呼び出してから、 とを出力しようとしていましimageName
たgroupName
。これにより、正常に印刷され、セグメンテーション違反が発生する前にgroupName
、400 個の名前のうち約 120 個が正常にimageName
印刷されました。
質問:free
メモリの -ingが機能しなかったのはなぜですか? それともメモリ解放に時間がかかりますか?