2

または、 Facing an error — glibc detected free invalid next size (fast) の複製。

このコードをコンパイルして実行すると、「realloc(): 次のサイズが無効です: 0x0000000002483010」というエラー メッセージが表示されます。

過去6時間、これに対する解決策を見つけようとしてきましたが、運がありません..

これが私のコードの関連部分です-

#include<stdio.h>
#include<stdlib.h>

typedef struct vertex
{
    char* name;
    int id;
    int outDegree;
}vertex;

int main(){
    vertex *tmpVertice;
    vertex *vertices = (vertex*)calloc(1, sizeof(vertex));
    int p=1;
    while(p<20){
        vertex temp={"hi",p,0};
        vertices[p-1]=temp;
        tmpVertice=(vertex*)realloc(vertices,p);
        if(tmpVertice!=NULL) vertices=tmpVertice;
        p++;
    }
    return 0;
}
4

2 に答える 2

6

reallocは、必要に応じて以前のバッファを解放するため、ループ内の行free(vertices)free(tmpVertice)間違っているため、削除する必要があります。

編集:さらに修正を加えたプログラムの更新バージョンを以下に含めました。バイトrealloc p*sizeof(vertex)ではなくする必要がありました。p配列の終わりを超えて書き込んでから、それを拡大していました。reallocループの開始時に変更しました

int main(){
    vertex *tmpVertice;
    vertex *vertices = NULL;
    int p=1;
    while(p<20){
        vertex temp={"hi",p,0};
        tmpVertice=realloc(vertices,p*sizeof(vertex));
        if(tmpVertice==NULL) {
            printf("ERROR: realloc failed\n");
            return -1;
        }
        vertices=tmpVertice;
        vertices[p-1]=temp;

        p++;
    }
    return 0;
}
于 2012-12-21T18:39:06.920 に答える
0

最初の反復では にアクセスしますがvertices[p-1] = vertices[2-1] = vertices[1]、1 バイトしか割り当てません (頂点 [0] にのみアクセスできます)。

于 2012-12-21T18:38:34.043 に答える