我有一个像这样的字符指针
char *ptr;
我可以像这样分配值
*ptr='a';
*(ptr+1)='b';
现在我可以这样做,为什么要使用malloc?
我很幸运,这个指针没有引用进程正在使用的地址吗?或者,如果我不使用'malloc',我的数据是否有可能被其他进程损坏?
答案 0 :(得分:16)
不,你不幸运。如果你很幸运,程序会崩溃,所以你知道你有问题。如上所述,您的代码是未定义的行为。您正在通过指向未分配内存的指针来写入数据。我很幸运,这个指针是 没有引用的地址 被一个过程使用?
§6.5.6/ 8
如果两者都有 指针操作数和结果点 到同一个数组对象的元素, 或者一个过去的最后一个元素 数组对象,评估不得 产生溢出; 否则, 行为未定义。