我试图跟踪C中的使用后免费错误.我的问题是,如果我有这样的代码:
A * ptrA = malloc(sizeof(A));
A * aliasA = ptrA;
// do something '
free(ptrA)
// some other code
B * ptrB = malloc(sizeof(B)); // assume this return same pointer as ptrA
//trying to use aliasA here
Run Code Online (Sandbox Code Playgroud)
只是想知道aliasA的使用是否是UAF错误?如果是的话,这里出了什么问题?
要清除这个问题,我认为最好添加一个小例子:
int main(){
int *ptr = (int *)malloc(4);
*ptr = 5;
int *ptr2 = ptr;
printf("%d\n", *ptr);
free(ptr);
int *new_ptr = malloc(4);
*new_ptr = 66;
printf("%d\n", *ptr2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
5
66
Run Code Online (Sandbox Code Playgroud)
(我检查ptr,并new_ptr在S2E:http://s2e.systems/这两个指针实际上指向同一个地址释放PTR后,同一地址分配给new_ptr.)
从上面的输出,似乎使用 …
在动态内存分配方面,我是新手.当我们释放内存时,使用void free(void *ptr)内存被释放,但指针的内容不会被删除.这是为什么?最新的C编译器有什么不同吗?