1

文字列を読み取ろうとしています

char *string=malloc(sizeof(char));
char *start_string=string; //pointer to string start
while ((readch=read(file, buffer, 4000))!=0){ // read
    filelen=filelen+readch; //string length
    for (d=0;d<readch;d++)
        *start_string++=buffer[d]; //append buffer to str
    realloc(string, filelen); //realloc with new length

時々、これは次のエラーでクラッシュします:

   malloc: *** error for object 0x1001000e0: pointer being realloc'd was not allocated

しかし、そうでない場合もあります。修正方法がわかりません。

4

2 に答える 2

7

realloc()渡されたポインタを更新しません。が成功した場合realloc()、渡されたポインタはfree()d であり、割り当てられたメモリのアドレスが返されます。投稿されたコードでrealloc()は、複数回試行されますがfree(string)、これは未定義の動作です。

の結果を保存realloc():

char* t = realloc(string, filelen);
if (t)
{
    string = t;
}
于 2013-04-24T16:32:56.387 に答える