for(k=i; k<MAXRECORDS; k++) {
if(slist->servers_ptr[k+1] != NULL) {
slist->servers_ptr[k] = slist->servers_ptr[k+1];
} else slist->servers_ptr[k] = NULL;
}
私はvalgrindの実行すると、私はMAXRECORDS = 10
、配列のサイズはMAXRECORDS
であることを無効なサイズ8forループのメモリリークの原因は何ですか?
ノートのエラーを取得します。
これは私のforループの境界線の場合と関係がありますが、論理的にどのように起こっているのか分かりません。
編集:forループの最後のラウンドで、servers_ptr[k+1]
にアクセスすると配列外になり、valgrindエラーが発生することが指摘されました。私は以来私のコードを更新しました:
for(k=i; k<MAXRECORDS-1; k++) {
if(slist->servers_ptr[k+1] != NULL) {
slist->servers_ptr[k] = slist->servers_ptr[k+1];
if(k==MAXRECORDS-2)slist->servers_ptr[k+1] = NULL;
} else slist->servers_ptr[k] = NULL;
}
私はまだvalgrindでエラーが発生します。私はそれを間違って更新しましたか?
次に私の答えは正しいです。 –
あなたはここで 'malloc'や' realloc'をやっていません。あなたは本当にこのコードでいくつかのメモリリークの問題があると思いますか?私は問題があなたがメモリを割り当てている他のコードスニペットであるかもしれないと思います。 – c0da
明らかに間違っていることはありません。 valgrindから得た正確なエラーを投稿できますか? –