C中realloc的问题

C中realloc的问题,c,realloc,C,Realloc,我在和realloc做斗争 strucType mkBggr (structType x, char ch) { x = realloc(x, 100); printf("%d", sizeof(x)); } 我认为这应该打印出值100,但它打印出8 这显然与指针有关,但我不知道是什么。我在x前面加了*s和&s,但我似乎不明白。感谢您的帮助 Realloc返回指针,因此x是指针类型。sizeof(x)返回指针的大小,在此环境中为8字节。它打印值8,因为您需要指针(x)的大小。

我在和realloc做斗争

strucType mkBggr (structType x, char ch) { 
    x = realloc(x, 100);
    printf("%d", sizeof(x));
}
我认为这应该打印出值100,但它打印出8


这显然与指针有关,但我不知道是什么。我在x前面加了*s和&s,但我似乎不明白。感谢您的帮助

Realloc返回指针,因此x是指针类型。sizeof(x)返回指针的大小,在此环境中为8字节。

它打印值8,因为您需要指针(x)的大小。您无法打印分配内存块的大小-您必须自己跟踪它


这就是为什么我不建议使用realloc;我所看到的所有询问它的人都是错误的。

请添加
structType
的定义。这个问题与
realloc
无关。删除对
realloc
的调用,输出保持不变。问问自己什么是
x
,以及
sizeof
的意思。顺便说一句,在这个代码中使用realloc的正确方法是:
structType tmp=realloc(x,100);如果(tmp){x=tmp;}否则{/*…realloc失败,需要保留旧值x...*/}
这已经被问了好几次了,我记得我自己也回答了好几次。@hyde失败总是返回
NULL,但返回
realloc()/malloc()` NULL
并不总是表示失败。考虑当我想重新分配一个内存块来改变大小,但保留内容的持久性。如果不是
realloc
@DavidHerrnan,请推荐一种方法:只需使用
malloc
memcpy
free
明确地测试
malloc
free
之前的故障。这比<代码> ReLoCu @ BaselStaynkvigy好得多,请考虑在“CordReaveW.StAccExchange”com上发布<代码> Maloc、MycPy、Field解决方案。@ BaselestalyKyvigy为什么使用那些显式更好?因为做显式地处理失败案例要好得多。幼稚的
ptr=realloc(ptr,大小)在发生故障时丢失
ptr
。。。。