我有一些关于指针和内存分配的非常基本的问题。
在下面的代码中,指针
c
实际指向哪里?换句话说,字符串"xyz"
存储在内存中的什么位置(堆栈/堆等)?分配给
a
的内存位置会发生什么变化,因为我不再使用它了?如果我取消对注释部分的注释,代码似乎运行良好。在这种情况下内存发生了什么?
#include <stdio.h> main() { char *c; //c = (char *)malloc(2); c = "a"; c = "xyz" ; printf("%s",c); return 0; }
输出:
xyz
编辑:
在阅读了一些答案和第一条评论后,我想到了另一个问题:
在下面的例子中,字符串存储在哪里?我可以稍后更改它们吗?
char *c[] = {"a","xyz"};
最佳答案
具体细节取决于实现,但在大多数常见实现中,
"a"
和"xyz"
等文字字符串存储在程序,就像实现程序的机器码一样。分配a = "xyz";
设置a
指向内存中的那个位置。"a"
的内存不受影响。但是,优化编译器可能会注意到c
从未在该赋值和被重新赋值之间使用,因此它可以简单地忽略第一个赋值,并且永远不会为"a"
分配任何空间> 完全没有。您使用
malloc()
分配的内存将保持分配状态,直到程序结束。分配内存而不释放它称为内存泄漏,您应该尽量避免这种情况。
关于c - char* 指向哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24114877/