文字列のリストを扱うクラスとして以下のようなものを
作成いたしました。
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); <-ここでメモリリークが発生する!!
};
:
:
};
sizeof(char)ではなくsizeof(char*)では?
有難うございました。
上手くいきました。
char**(m_list)やその数を管理する整数の変数(m_cnt)は
使わなければならないのでしょうか?
せっかくC++を使ってるのだからstringやvectorなど使えばいいと思うのですが・・・
> せっかくC++を使ってるのだからstringやvectorなど使えばいいと思うのですが・・・
いやまったく。
お勉強が目的ならともかく、std::vector<std::string> でオシマイですわな。