私は私がこのようにしようとしたtime.soに1ブロックずつ増やしてSTACKのdynamicallを作成する必要がスタックのrealloc():reallocの無効次のサイズとのmalloc():高速なmallocのメモリ破損
typedef struct cool {
int value;
}arr;
typedef struct stack {
int top;
arr **st;
}STACK;
を作成しています..私は()私はこのようなエラーが発生します作成呼び出すことによってreallocteなしproblem..but再び私が作ると呼ばれる最初の時間()のための
int size = 1;
STACK *mainstack;
mainstack = (STACK *) malloc (sizeof(STACK));
create(mainstack);
create(mainstack);
create(mainstack);
void create(STACK *mainstack) {
if((mainstack = realloc(mainstack, (size + 1))) != NULL) {
mainstack[size].st = (arr **) malloc(10 * sizeof(arr*));
}
++size;
}
... のrealloc():無効次のサイズ... ..
ので、私はこのようなエラーが...
のmalloc()を取得後、再度
mainstack = realloc(mainstack, (size + 1) * sizeof(STACK));
でのreallocを変更:私はその作業を作成すると呼ばれるgood.but aftrerメモリ破損の高速
2回エラーを示す第三の呼び出し。 誰かが実際にそれらの背後に何を教えてください?またはこれらのエラーを取得せずに自分の考えを満たすために他の方法があります。..
'create'の' mainstack'は、呼び出し側関数の 'mainstack'のコピーです。値を変更しても元の値は変更されません。 – mch
そして 'STACK'の定義が与えられると、そのサイズは固定されます。 'realloc'(そして、' malloc() ')は、' STACK'のメンバ 'st'です。 –
そして、この「サイズ」は何を表していますか?スタックエントリの数?そして、 'はsizeof(* mainstack)'ここで失礼なことしようとしていない割り当て – tilz0R