#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
是否会导致崩溃或错误的结果,因此不建议写出来,还是行吗?
答案 0 :(得分:3)
是的,它是100%安全的。对齐是可以的,因为malloc结果始终是对齐的。因此,您只需将指针保存在已分配内存的开头。
它(IMO)也没有违反严格的别名规则