私はstdinから読んでいます。私は何を読むのか分からないので、私はmallocを使う必要があります。"解放されたポインタが割り当てられていません"
は、私は時々無料(TMP)の前に、それは無料(最終)の前に起こる、ポインタが解放され時には
を割り当てられていませんでした取得しています。
ポインタを作成してから空きにする前に、両方のポインタが正しくnullでないことを確認します。誰かが私が間違っていることを指摘できますか?
total_size = 0;
final = (char *)malloc(sizeof(char) * 1);
if (!final)
{
printf("Error Allocating Memory for final\n");
return (NULL);
}
while ((ret = read(0, buf, BUF_SIZE)) > 0)
{
tmp = (char *)malloc(sizeof(char) * ft_strlen(final));
if (!tmp)
{
printf("Error Allocating Memory for tmp\n");
return (NULL);
}
strcpy(tmp, final);
if (final)
free(final);
buf[ret] = '\0';
total_size = total_size + ret;
final = (char *)malloc(sizeof(char) * total_size);
if (!final)
{
printf("Error Allocating Memory for final\n");
return (NULL);
}
final = strcat(tmp, buf);
if (tmp)
free(tmp);
}
return (final);
「ft_strlen」とは何ですか?その動作が 'strlen'に似ていれば、ここでUBを得るでしょう:' tmp =(char *)malloc(sizeof(char)* ft_strlen(final)); ' –
最初に、 'malloc'。なぜ 'free'の前に' final'か 'tmp'をテストするのですか?彼らは価値がある必要があります。最後に、[mcve]を見ることができますか? – KevinDTimm
もう1つは、これを小さな部分に分解してデバッグを迅速化します。 – KevinDTimm