C中realloc的问题
我在和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)的大小。
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
。。。。