可能重复:
C 数组实例化 - 堆栈或堆分配?
当动态分配包含 char 指针的结构时,实际的 char 指针会发生什么情况?它存储在哪里?
一旦结构被释放,char 指针是否也随之被释放?
例如考虑以下结构:
struct mix
{
int a;
float b;
char *s;
};
typedef struct mix mix;
然后为它分配内存的以下代码:
int main()
{
mix *ptr = (mix*)malloc(sizeof(mix));
ptr->a = 3;
ptr->b = 4.5f;
ptr->s = "Hi, there, I'm just a really long string.";
free(ptr);
return 0;
}
在堆栈上分配,*s
然后与? *ptr
我可以想象它确实是在堆栈上分配的,因为它不是以任何方式动态分配的(除非 malloc 有一些我不知道的功能)。而且我想“超出范围”*s
将是释放的点*ptr
。还是我完全错了?:)
非常感谢!