メモリの解放についての意味がわかりません。
Posted: 2009年6月18日(木) 01:06
メモリを解放するという意味がわかりません。
参考書にしたがって取得したメモリ領域は解放しているのですが、
解放した領域を戻り値として呼び出し元に返す場合どこでメモリを解放すればいいのでしょうか。
やりたいことは、VBのMID関数を作ることで、text文字列のstartpoint~endpointまでを取り出そうとしています。
wchar_t *MyStrncatFunc(wchar_t *text, int startpoint, int endpoint){
int i;
int text_size;
wchar_t *p;
// text文字列の長さを取得
text_size = WideStringReturnFunction(text);
// エラー処理
if((startpoint>endpoint) | (endpoint > text_size)){
puts("[MyStrncatFunc:001]引数に問題があります。");
exit(1);
}
// 領域取得(text文字数分の領域取得)
p = (wchar_t *)malloc((text_size+1) * sizeof(wchar_t));
if(p == NULL){
puts("[MyStrncatFunc:002] : 領域の確保に失敗しました。");
exit(1);
}
// startpoint~endpointまでの文字をコピー
for(i=startpoint; i<=endpoint; i++){
*(p+i) = *(text+i);
}
// 終端文字
*(p+i) = L'\0';
// ★001★:ここで取得した領域を開放すると、呼び出し元に切り出した文字列が表示されない。
return p;
// ★002★:ここでメモリ解放しても、通らない。
}
参考書にしたがって取得したメモリ領域は解放しているのですが、
解放した領域を戻り値として呼び出し元に返す場合どこでメモリを解放すればいいのでしょうか。
やりたいことは、VBのMID関数を作ることで、text文字列のstartpoint~endpointまでを取り出そうとしています。
wchar_t *MyStrncatFunc(wchar_t *text, int startpoint, int endpoint){
int i;
int text_size;
wchar_t *p;
// text文字列の長さを取得
text_size = WideStringReturnFunction(text);
// エラー処理
if((startpoint>endpoint) | (endpoint > text_size)){
puts("[MyStrncatFunc:001]引数に問題があります。");
exit(1);
}
// 領域取得(text文字数分の領域取得)
p = (wchar_t *)malloc((text_size+1) * sizeof(wchar_t));
if(p == NULL){
puts("[MyStrncatFunc:002] : 領域の確保に失敗しました。");
exit(1);
}
// startpoint~endpointまでの文字をコピー
for(i=startpoint; i<=endpoint; i++){
*(p+i) = *(text+i);
}
// 終端文字
*(p+i) = L'\0';
// ★001★:ここで取得した領域を開放すると、呼び出し元に切り出した文字列が表示されない。
return p;
// ★002★:ここでメモリ解放しても、通らない。
}