1

ダブルポインターを使用して、特定の文の単語を動的 2-D 配列に格納する動的配列を作成しようとしていますが、3 つ以上の単語を指定すると、次のエラーが発生します。

*** glibc detected *** ./a.out: realloc(): invalid next size: 0x000000000255a030 ***

以下の関連コード:

#include <stdio.h>
#include <stdlib.h>  
int main()  
{
    char **ptr=NULL;  
    char letter;    
    int ptrsize=1, wordsize=1;  
    ptr=malloc(ptrsize*sizeof(char *));
    ptr[ptrsize]=(char *)malloc(wordsize*sizeof(char));
    do
    {
            letter=getchar();
            while ((letter!=' ')&&(letter!='\n'))
            {
                    ptr[ptrsize][wordsize]=letter;
                    *ptr= realloc(*ptr,wordsize+1);
                    wordsize++;
                    letter=getchar();
            }
            ptrsize++;
            ptr = realloc(ptr,ptrsize*sizeof(char));
            wordsize=1;
            ptr[ptrsize]=malloc(wordsize*sizeof(char));
    }
    while (letter!='\n');
    return 0;
}

ダブルポインターの malloc と realloc を変更することで文のサイズを大きくすることができましたが、まだ確実な解決策は見つかりませんでした。前もって感謝します。

4

1 に答える 1

2

このコード

 ptr=malloc(ptrsize*sizeof(char *));
 ptr[ptrsize]=(char *)malloc(wordsize*sizeof(char));

また、ループ本体の後半で繰り返される同様の行は正しくありません。

のような配列

Type* ptr = malloc(N * sizeof(Type));

0には からまでの有効なインデックスがありますN - 1ptr[N]常に配列の終わりを過ぎます。このメモリへの書き込みや再割り当てを行うと、ヒープ データ構造が破損する可能性があります。

于 2013-01-04T02:35:43.433 に答える