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被认为是免费的吗?
答案 0 :(得分:1)
您会多次获得未定义的行为(google that term):
f2
您解除引用x
后,因为printf
x
%s
格式说明符将取消引用x
{1}},或换句话说,它将访问x
指向的内存,并且在调用free
后该内存将具有未确定的内容。
即使您删除了free(x
),仍然会得到未定义的行为,因为您printf
x
x
,而prot.attr("class", id + " item")
指向有效但是没有初始化的记忆。