在编写代码时遇到了一个问题
char* a = malloc (sizeof(char));
a = "blabla";
free(a);
给出了一个错误,因为我将指针a的值更改为其他值。
那么,为什么会这样呢
char* a = "blabla";
printf("%s", a);
我又把指针的值改成了blabla
,我破坏了指针的地址。它应该是错误的,不是吗?
第一种情况有一个bug,因为您正在传递一个地址给free
,而不是您从malloc
获得的地址。
第二种情况没有这样的问题,那么为什么它不能工作呢?你并没有"破坏"指针的地址,你只是把它设置为一个有效的地址,然后把这个有效的地址用于一个有效的目的。
第二个例子和
没有什么不同int i = 1;
printf ("%d", i);
您设置了它的值,并以正确的方式使用了新的合法值,所以没有问题。
在第二个中,您正在创建一个指向字符串文字"blabla"
的指针,它不会以任何方式影响指针,而是创建一个新指针。在第一个示例中,您更改了指针本身的值。
第一个代码片段导致内存泄漏。一旦执行语句a = "blabla";
,指针a
将不再指向由malloc
分配的内存,并且它的地址丢失。
您的地址丢失的第一个片段在'blaba'存储的地方,它会给出错误。在第二个例子中你直接给blabla