堆释放时的指针置0与指针指向的地址里的内容置0问题

发布于 2023-05-29  385 次阅读


指针置0

c语言:


int* ptr = malloc(sizeof(int)); // 分配一个 int 类型的内存块
ptr = 0; // 将指针置为 0

汇编代码:

mov     rdi, 4          ; sizeof(int)
call    malloc          ; 分配内存块
mov     QWORD PTR [rbp-8], rax ; 将分配的内存块地址存储在栈上的指针变量 ptr 中
mov     QWORD PTR [rbp-8], 0   ; 将指针变量 ptr 置为 0

指针指向的地址的内容置0

c语言:

int* ptr = malloc(sizeof(int)); // 分配一个 int 类型的内存块
*ptr = 42; // 将内存块的值设置为 42
*ptr = 0; // 将内存块的值设置为 0

汇编代码:

mov     rdi, 4          ; sizeof(int)
call    malloc          ; 分配内存块
mov     QWORD PTR [rbp-8], rax ; 将分配的内存块地址存储在栈上的指针变量 ptr 中
mov     rax, QWORD PTR [rbp-8] ; 将 ptr 指向的内存块地址存储在 rax 中
mov     DWORD PTR [rax], 42   ; 将内存块的值设置为 42
mov     rax, QWORD PTR [rbp-8] ; 将 ptr 指向的内存块地址存储在 rax 中
mov     DWORD PTR [rax], 0    ; 将内存块的值设置为 0

穿过云层我试着努力向你奔跑