关于realloc的问题
下面的两个代码有什么不同呢?
result_num++
result=(RESULT*)realloc(result,sizeof(RESULT)*result_num);
result=(RESULT*)realloc(result,sizeof(RESULT)+sizeof(result));
其中RESULT是我定义的一个结构体,result它的一个指针变量,result_num告诉我们现在一共有多少个该结构元素了.我是想让该指针变量在原来的基础上动态增长(有很多结果,最后构成一个数组),可是后者老是有那个after normal block的错误,改成前者就没有了,正常了.这是为啥哦?
[解决办法]
sizeof(result)是指针本身的尺寸,又不是结构体的尺寸,后者错误(注意大小写敏感):
sizeof(RESULT)+sizeof(result)
调整后的尺寸应该是sizeof(RESULT)*result_num,所以前者正确,后者有点不知所谓。
[解决办法]
realloc的作用是为指针分配空间用的,sizeof(RESULT)是结构体的大小,乘上该结构体对象的数量,就是指针所指空间的大小,所以第一个正确。
sizeof(result)是指针的大小,而在相同环境下,指针大小是一定的,你用一个结构体的空间加上一个指针的空间,显然不能正确表示你究竟要为指针分配多大空间