此代码段不推荐还是不正确,为什么?

时间:2020-03-08 01:18:44

标签: c pointers memory

#include <stdio.h>
#include <stdlib.h>
int main() {
    const int N = 20;
    char* ptr0 = (char*)malloc(sizeof(char*)*N);
    *(char**)(ptr0) = ptr0; //is this line ok?
    free(ptr0);

    return 0;
}

我只是想知道,第六行代码*(char**)(ptr0) = ptr0是否会导致崩溃或错误的结果,因此不建议写出来,还是行吗?

1 个答案:

答案 0 :(得分:3)

是的,它是100%安全的。对齐是可以的,因为malloc结果始终是对齐的。因此,您只需将指针保存在已分配内存的开头。

它(IMO)也没有违反严格的别名规则

https://godbolt.org/z/p_8jrP