4

文字列を連結し、結合された文字列を返す小さな関数を作成しました。ただし、関数の 3 番目の変数にメモリを割り当てているため、メモリは関数が終了したときに解放されますか、それともそこにとどまり、後で解放する必要がありますか? それを解放する必要がある場合、それを行うための最もスタイリッシュなソリューションは何ですか?

これがテストコードです。動作しますが、ツールでそのメモリが解放されているかどうかはわかりません。

#include <stdio.h>
#include <math.h>
#include <string.h>

char * StrCat(const char *st1, const char *st2){
    char *string = calloc((strlen(st1) + strlen(st2) + 1), sizeof(char));
    strcat(string, st1);
    strcat(string, st2);
    return string;
}

int main(){
    printf("String: %s\n", StrCat("HELLO ", "WORLD"));
    return 0;
}
4

5 に答える 5

13

はい、解放する必要があります。

おそらく次のようなものです:

int main(){
    char *s = StrCat("HELLO ", "WORLD");
    printf("String: %s\n", s);
    free(s);
    return 0;
}
于 2009-06-28T18:33:07.010 に答える
5

アプリケーションは printf の直後に終了するため、解放する必要はまったくありません。しかし、はい、それを解放することは常に良い習慣です。

于 2009-06-28T18:44:51.890 に答える
3

はい、解放する必要があります。valgrind を試してリークを検出してください。

于 2009-06-28T18:35:15.540 に答える
3

はい。calloc、malloc、new などを呼び出す場合は、メモリを解放する関数も呼び出す必要があります。

于 2009-06-28T18:36:56.443 に答える
2

メモリ リークと空きメモリはトリッキーな問題です。デバッガを試す価値はありますか? そんな悩みを解消するためにdeleakerを使っています。

于 2011-11-26T09:19:37.683 に答える