更改C中的指针

标签 c pointers malloc

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

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

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

那么,为什么会这样呢

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

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

最佳答案

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

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

第二个例子没有什么不同:

int i = 1;
printf ("%d", i);

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

关于更改C中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32051189/

相关文章:

c - asmlinkage 在 Linux 代码中没有定义

c++ - Openmp 初始化 vector

获取 native 指针时出现 C++ 错误 C2440

c - C编程:使用malloc,指针和数组

c - 为什么我的 C 代码不能使用指针和结构体工作?

c++ - jemalloc 未检测到内存损坏

c - Getc 过度读取一个\n 字符

c - 指针引用: What's the difference between pointer referencing in number 1 and 2.

c - 将 char 数组分配给 char*

c - 多个小 malloc 与一个大 malloc