メモリ割り当てについて質問があります。ブロックchar*
内でa を宣言すると、ブロックの実行が完了すると が破棄されます。ブロックはループ内にあるため、何度も反復されます。ただし、次の例に示すように、ブロックで宣言された が変数にエイリアスされている場合はどうなるでしょうか。私の質問は、このようなものをどのように支払うのですか? 一時変数を解放すると、保持したい変数も解放するため、セグメンテーション違反が発生するように感じます。もしそうなら、私はその声明がどこに行くのか途方に暮れています.else
char*
else
else
while
char*
else
malloc'd
char*
free
char* print_path = NULL;
(をちょきちょきと切る)
(while)
else{
char* temp_path = print_path;
int temp_size = strlen(temp_path)+strlen(file_name(child->fts_path))+1;
print_path = (char*)malloc(temp_size);
strcpy(print_path, temp_path);
strncat(print_path, file_name(child->fts_path), strlen(file_name(child->fts_path)));
printf("%s:\n\n", print_path);
}
(をちょきちょきと切る)
再度実行されないことがわかった後、プログラムの最後で print_path を解放することを指摘したいと思います。ただし、解放したいのはループの中間実行です。どんな助けでも大歓迎です。ありがとう!