#include <stdio.h>
struct data
{
char a[100*1024];
};
struct test
{
void * pc;
struct test * next;
};
struct data dd;
struct data * pd = ⅆ
void *mall(struct data *p)
{
return (void *)(&(p->a[0]));
}
int main(void)
{
struct test * p = mall(pd);
p->pc = "testasdfsadfasdfasdfasdfsadfsadfsadfsadfsadfsadfsadfsadfasdfsadfsadfsadfsadfsadfasdfsadfsadfsadfsadf";
printf("%p\n%p\n", &dd.a[0], p->pc); // <-- line 27
return 0;
}
我不明白如何将内存分配给main中的p,我认为没有内存分配给p-&gt; pc,但程序可以正常运行。如果你认为内存是全局数组,那么为什么第27行的输出不一样呢?
答案 0 :(得分:1)
为什么第27行的输出不一样?
在“第27行”
&dd.a[0]
评估dd.a
第一个元素的地址。
p->pc
保留此行中指定的字符串文字"testasdfsadfasdfasdfas..."
的地址
p->pc = "testasdfsadfasdfasdfas...";
(你知道有人不能在C中分配数组,不是吗?)
答案 1 :(得分:0)
你正在堆栈中做所有事情。所以你不需要将任何东西malloc到堆中。你不会发生段错误,因为你的程序仍然可以访问你指定字符串的内存(考虑到你不能指定字符串的事实)。