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