为堆中的结构元素分配内存?

时间:2014-08-25 18:07:49

标签: c pointers malloc structure

为堆中的结构元素分配内存但我得到分段错误请帮我修复

#include<stdio.h>
 struct st
 {
      int i;
      int *p; 
      char ch;
 };
  int main()
{
    struct st *q;  // creating object pointer *q
    int i=89;
    q->p=malloc(10);
    printf("%d\n",*((q->p)-1)); // i m printing size allocated in heap?
    q->p=&i;                   // storing address i in structure element *p
    printf("%d\n",*(q->p));    // segmentation fault?
}

2 个答案:

答案 0 :(得分:2)

struct st *q;仅声明指向struct的指针。 q指向未知的内存位置。您还需要为q分配内存,否则它将调用未定义的行为。

struct st *q = malloc(sizeof(struct st));  

此外,q->p=&i;会导致内存泄漏。

答案 1 :(得分:0)

确定哪一行代码会对您的程序进行段错误处理,这是最简单的技巧之一(&#34; distingishable&#34;)在可疑行之后。

通过这样做,你会发现,第一次访问q会失败。