2015-11-04 119 views
-5
#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; 
} 

我不明白如何分配给主内存中的内存,我认为没有内存分配给P - > PC,但程序可以正常运行。如果你认为内存是全局数组,那么第27行的输出如何不一样呢?C内存分配

+0

尝试打印地址。 –

+0

调用未定义的行为。 – Olaf

+0

我已经完成了。 p的地址与a相同,但不是pc。而dd.a [0]没有赋值。所以我不知道p-> pc存储的内容在哪里。 – ponypaver

回答

1

27号线的输出怎么不一样?

在 “第27行”

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

  • p->pc持有字符串文字"testasdfsadfasdfasdfas..."的地址作为此行

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

(你知道一个也不会在C数组分配,不是吗?)

分配
+0

先生,如果你打印'&p-> pc',那么你会得到相同的地址。 – ameyCU

0

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