が何であるかを知らずに、そのようにしてよいかどうかを判断するのは困難です。しかし、あなたはこれで始めることができます....realloc
I do something
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *temp,count;
}foo;
extern char etext, edata, end;
int main()
{
printf("Heap before first malloc %p\n", sbrk(0));
foo *fake = malloc(1*sizeof(foo));
printf("heap after first malloc %p\n", sbrk(0));
fake->count = 0;
++(fake->count);
fake->temp = malloc((fake->count)*sizeof(int));
printf("heap after second malloc %p\n", sbrk(0));
fake->count += 2;
fake->temp = realloc(fake->temp, (fake->count) * sizeof(int));
printf("count %d\n", fake->count);
printf("heap after realloc %p\n", sbrk(0));
printf("program text segment(etext) %10p\n", &etext);
printf("initialized data segment(edata) %10p\n", &edata);
printf("uninitialized data segment (end) %10p\n", &end);
return 0;
}
これにより、ヒープアドレスも出力されます。
Heap before first malloc 0x239b000
heap after first malloc 0x23bc000
heap after second malloc 0x23bc000
count 3
heap after realloc 0x23bc000
program text segment(etext) 0x400816
initialized data segment(edata) 0x600bc4
uninitialized data segment (end) 0x600bd8
のキャストは必要ありませんmalloc()
。
calloc()
あなたの記憶を一掃することを考えています。再割り当てを行うと、誤って初期化されたメモリ ブロックを取得する可能性があります。(最近解放されたブロックのように)。
使用する前に、必ず の戻り値を確認してくださいrealloc()
。失敗する可能性realloc()
はかなり高いmalloc()
です。