[555] Re:reallocについて
投稿者:本多
2007/02/20 02:13:25
>>>free() の解説に、空ポインタの場合何もしないとあるので無問題です。
>>C89もセーフですよ。
確かにfree(NULL)は無問題なのですが、以下の※の箇所は大問題でした。
| if ( (prm = malloc( sizeof( typChangePrm))) == NULL) {
| fprintf(stderr,"ERROR: memory allocation\n");
| goto LERROR; ←ココ
| }
(中略)
| LERROR:
| free( prm->cpItem); ← ※
| free( prm);
| return NULL;
|}
このような箇所は「if ( prm ) free( prm->cpItem);」が必要ですね。
以下の箇所も間違っていますね。
誤>void PrmDestroy( typChangePrm *prm)
誤>{
誤> int i;
誤>
誤> for ( i=0; i<prm->itemCount; i++)
誤> free(prm->cpItem);
誤> free(prm->cpItem);
誤> free(prm);
誤>}
正>void PrmDestroy( typChangePrm *prm)
正>{
正> int i;
正>
正> if ( prm && prm->cpItem) {
正> for ( i=0; i<prm->itemCount; i++) {
正> free(prm->cpItem[i]);
正> }
正> }
正> if ( prm) free(prm->cpItem);
正> free(prm);
正>}
大変失礼しました。私の能力の低さが露呈してます(T-T)