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 是否被视为释放后使用?
最佳答案
您会多次遇到未定义的行为(谷歌该术语):
在
f2
中,一旦x
被释放,您就会取消引用它,因为printf
ingx
使用%s
格式说明符将取消引用x
,或者换句话说,它将访问x
指向的内存,并且该内存将具有未确定的调用free
后的内容。即使你删除了
free(x
),你仍然会得到未定义的行为,因为这样你就会printf
ingx
,而x
指向有效但未初始化的内存。
关于c - 此代码是否包含释放后使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44415381/