更改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
的第二个片段
在编写代码时我遇到了一个问题
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
的第二个片段