更改C中的指针

changing the pointer in C

在编写代码时我遇到了一个问题

char* a = malloc (sizeof(char));
a = "blabla";
free(a);

给我一个错误,因为我将指针 a 的值更改为其他值。

那么,为什么这样做有效

char* a = "blabla";
printf("%s", a);

我再次将指针的值更改为 blabla,我破坏了指针地址。应该是错误吧?

第一种情况有一个错误,因为您将地址传递给 free 而不是从 malloc 获得的地址。那是一个错误。

第二种情况就没有这个问题,那为什么不行呢?您不是 "ruining" 指针的地址,您是将其设置为有效地址,然后将该有效地址用于有效目的。

第二个例子与:

没有区别
int i = 1;
printf ("%d", i);

您设置了它的值并以正确的方式使用了新的合法值,所以没问题。

在第二个中,您创建了一个指向字符串文字 "blabla" 的指针,它不会以任何方式影响指针,而是创建了一个新指针。在第一个示例中,您更改了指针本身的值。

第一个片段导致内存泄漏。一旦执行语句a = "blabla";,指针a将不再指向malloc分配的内存,其地址丢失。

您的地址丢失的第一个片段存储在 'blaba' 它将给 error.In 您直接分配给 blabla

的第二个片段