为堆中的结构元素分配内存但我得到分段错误请帮我修复
#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?
}
答案 0 :(得分:2)
struct st *q;
仅声明指向struct的指针。 q
指向未知的内存位置。您还需要为q
分配内存,否则它将调用未定义的行为。
struct st *q = malloc(sizeof(struct st));
此外,q->p=&i;
会导致内存泄漏。
答案 1 :(得分:0)
确定哪一行代码会对您的程序进行段错误处理,这是最简单的技巧之一(&#34; distingishable&#34;)在可疑行之后。
通过这样做,你会发现,第一次访问q会失败。