【发布时间】:2017-11-08 23:14:11
【问题描述】:
int f2(char* x, int f) {
int i=0;
free(x);
if(f) {
printf("%s", x);
return 1;
}
return 0;
}
int main(int argc, char argv) {
char* x = malloc(10);
return f2(x, argc);
}
将释放的指针传递给 printf 是否考虑在释放后使用?
【问题讨论】:
-
使用前免费... bruh
-
@Stargateur 参考?
-
f2 没有定义,如果它不是错字,那么你有你的第一个错误。如果 f1 被调用,是的,它是“释放后使用”。
-
@Stargateur 哦,等等。这不是一个值。它用作指针。没有注意到格式说明符。但如果是
%p,我认为不会是UB。 -
@Stargateur 谢谢。这是一个非常违反直觉的观点。只是另一个挑剔-“不确定”不是未定义的。顺便说一句,找到了一个关于不确定值稳定性的有趣文档:open-std.org/jtc1/sc22/wg14/www/docs/n1793.pdf
标签: c memory-management memory-leaks