相关疑难解决方法(0)

新指针(通过malloc)与其中一个释放/旧指针相同

我试图跟踪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.)

从上面的输出,似乎使用 …

c pointers heap-memory

5
推荐指数
1
解决办法
321
查看次数

当使用free()释放内存时,为什么指针指向的内容没有改变?

在动态内存分配方面,我是新手.当我们释放内存时,使用void free(void *ptr)内存被释放,但指针的内容不会被删除.这是为什么?最新的C编译器有什么不同吗?

c malloc free pointers memory-management

3
推荐指数
1
解决办法
142
查看次数

标签 统计

c ×2

pointers ×2

free ×1

heap-memory ×1

malloc ×1

memory-management ×1