free()でメモリリーク

[戻る]
ひろ [E-Mail] 2003/10/13(月) 13:50:59
文字列のリストを扱うクラスとして以下のようなものを
作成いたしました。
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 [E-Mail] 2003/10/13(月) 14:00:46
sizeof(char)ではなくsizeof(char*)では?

ひろ [E-Mail] 2003/10/13(月) 14:47:15
[[解決]]
有難うございました。
上手くいきました。

euro2004 2003/10/13(月) 14:49:07
char**(m_list)やその数を管理する整数の変数(m_cnt)は
使わなければならないのでしょうか?

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

επιστημη 2003/10/13(月) 23:24:01
> せっかくC++を使ってるのだからstringやvectorなど使えばいいと思うのですが・・・

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

古いスレッドには追加発言できません。