在C中改变指针



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

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

赋值

相关内容

  • 没有找到相关文章

最新更新