私は内部に自動mallocを備えたstrcat関数を再コードしようとしています。 いくつかのテストで、私の機能にデータ漏れ(正しい単語がわからない)があることがわかりました。ここでmallocでmy_strcatにリークがあります
は私のコードです:
char *my_strcat(char *a, char *b)
{
char *result;
int i;
int j;
int la;
int lb;
la = -1;
lb = -1;
while (a[++la] != '\0');
while (b[++lb] != '\0');
result = malloc(sizeof(char) * (la + lb) + 1);
i = -1;
while (a[++i] != '\0')
result[i] = a[i];
j = -1;
while (b[++j] != '\0')
result[i + j] = b[j];
result[i + j] = '\0';
return (result);
}
だから私は私が得るいくつかのいずれかの長さの文字列でwhileループで私my_strcatを使用しようとすると:
a.out: malloc.c:2392: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted (core dumped)
私は見つけようとしています私のメモリリークがどこから来るのか。しかし、私は理解できません。ここで
は呼び出す部分です:
while (!is_line_ended(read_result))
{
read(fd, read_result, READ_SIZE);
result = my_strcat(result, read_line(read_result, fd));
}
はここMY_STRLENです:
# define MY_STRLEN(s) (sizeof(s)/sizeof(s[0]))
私は1つのファイルと1つのヘッダに限定さだということに注意してください。私はファイルごとに5つの関数に制限されており、文字列関数を使用することはできません。
なぜあなた持って '|'各行の終わり: - 何らかの理由 - 場合は、あなたが
strlen
使用することを許可されていない、あなたは次の関数を使用することができますか? – mch私はそれらを見ない:/おそらく私はemacsからコピー貼り付けたものだ – Orionss
_one-length strings_何を意味するのだろうか? – LPs