在C中更改指针

时间:2015-08-17 13:04:50

标签: c pointers malloc

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

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

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

那么,为什么这样做

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

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

4 个答案:

答案 0 :(得分:4)

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

第二种情况没有这样的问题,为什么它不起作用?您没有“破坏”指针的地址,您将其设置为有效地址,然后将该有效地址用于有效目的。

第二个例子与:

没什么不同
int i = 1;
printf ("%d", i);

您设置其值并以正确的方式使用新的合法值,因此没有问题。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:-1)

地址丢失的第一个片段,其中存储了'blaba'它会给出错误。在第二个片段中,你直接将值赋予blabla