free()でメモリリーク – プログラミング – Home

通知
すべてクリア

[解決済] free()でメモリリーク


ひろ
 ひろ
(@ひろ)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

文字列のリストを扱うクラスとして以下のようなものを
作成いたしました。
CList::Insert関数でリストを追加した後、
CList::Release関数を呼ぶとfree()で
メモリリークが発生してしまいます。
その理由を教えて頂けませんでしょうか。
それと回避策があれば一緒に教えてください。

class CList
{
private:
char** m_list;
int m_cnt;

public:
:
:

int Insert(char* ins_str){
if(m_cnt == 0)
m_list = (char**)malloc(sizeof(char));
else
m_list = (char**)malloc(m_list, sizeof(char)*(m_cnt));

m_list[m_cnt] = (char*)malloc(strlen(ins_str)+1);
strcpy(m_list[m_cnt], ins_str);
m_cnt++;
return m_cnt;
};

int Release(){
for( int i = 0; i < m_cnt; i++ ){
free(m_list[i]);
}
free(m_list); <-ここでメモリリークが発生する!!
};

:
:
};


引用未解決
トピックタグ
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

sizeof(char)ではなくsizeof(char*)では?


返信引用
ひろ
 ひろ
(@ひろ)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

有難うございました。
上手くいきました。


返信引用
euro2004
 euro2004
(@euro2004)
ゲスト
結合: 22年前
投稿: 37
 

char**(m_list)やその数を管理する整数の変数(m_cnt)は
使わなければならないのでしょうか?

せっかくC++を使ってるのだからstringやvectorなど使えばいいと思うのですが・・・


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> せっかくC++を使ってるのだからstringやvectorなど使えばいいと思うのですが・・・

いやまったく。
お勉強が目的ならともかく、std::vector<std::string> でオシマイですわな。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました