C内存分配

时间:2015-11-04 11:53:12

标签: c

#include <stdio.h>

struct data
{
    char a[100*1024];
};

struct test
{
    void * pc;
    struct test * next;
};

struct data dd; 
struct data * pd = &dd;

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行的输出不一样呢?

2 个答案:

答案 0 :(得分:1)

  

为什么第27行的输出不一样?

在“第27行”

  • &dd.a[0]评估dd.a第一个元素的地址。

  • p->pc 保留此行中指定的字符串文字"testasdfsadfasdfasdfas..."的地址

    p->pc = "testasdfsadfasdfasdfas...";
    

(你知道有人不能在C中分配数组,不是吗?)

答案 1 :(得分:0)

你正在堆栈中做所有事情。所以你不需要将任何东西malloc到堆中。你不会发生段错误,因为你的程序仍然可以访问你指定字符串的内存(考虑到你不能指定字符串的事实)。

相关问题