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