ポインタの練習とメモリの割り当てに問題が発生しました。C言語でメモリを解放する際のエラー
ただし、メモリを解放するとスタックダンプが発生します。私は正しい場所で解放していますか?それが安全でない可能性がある私のプログラムに何か間違っていますか?
void display_names(char **names_to_display, char **output);
int main(void)
{
char *names[] = {"Luke", "John", "Peter", 0};
char **my_names = names;
char *new_output[1024] = {0};
size_t i = 0;
// Print the ordinal names
while(*my_names)
{
printf("Name: %s\n", *my_names++);
}
my_names = names; /* Reset */
display_names(my_names, new_output);
// Print the updated names
while(new_output[i])
{
printf("Full names: %s\n", new_output[i]);
i++;
}
// Free allocated memory
free(new_output);
getchar();
return 0;
}
void display_names(char **names_to_display, char **output)
{
while(*names_to_display)
{
*output = (char*) malloc(strlen("FullName: ") + strlen(*names_to_display) + 1);
if(!*output)
{
fprintf(stderr, "Cannot allocate memory");
exit(1);
}
// Copy new output
sprintf(*output, "FullName: %s", *names_to_display++);
printf("display_names(): Name: %s\n", *output++);
}
}
編集して問題を削除しましたか?それともそれはまだ問題/質問ですか? – epatel
コードを編集して実行しました。すべてうまくいった。しかし、これが別の関数で割り当てられているメモリを解放する正しい方法であれば、私は最終的な答えを得たいだけでした。 – ant2009
はい、これは正しい方法です – mfawzymkh