【问题标题】:Allocating memory for structure element in heap?为堆中的结构元素分配内存?
【发布时间】:2014-08-25 18:07:49
【问题描述】:

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

#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?
}

【问题讨论】:

  • 1) q :取消初始化。 2)*((q-&gt;p)-1):超出有效范围访问 3)q-&gt;p=&amp;i;:内存泄漏。
  • @BLUEPIXY *((q->p)-1) :在我知道的有效范围之外访问,但在这个位置,没有存储 malloc 分配的字节,这就是我要打印的内容.

标签: c pointers malloc structure


【解决方案1】:

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

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

另外,q-&gt;p=&amp;i; 会导致内存泄漏。

【讨论】:

  • @carrercarrer 在您的特定情况下,q 不需要在堆上分配。如果你愿意,你可以struct st q; ... q.p = malloc(10);
  • @carrercarrer 我的意思是 q 在您的示例中不需要是指针。它可以是分配在堆栈上的结构体。
【解决方案2】:

要确定哪一行代码使您的程序出现段错误,最简单的技巧之一是在可疑行之后 printf("something distingishable")。

这样做,您会发现,对 q 的第一次访问将失败。

【讨论】:

    猜你喜欢
    • 2013-08-30
    • 2016-09-22
    • 1970-01-01
    • 2016-01-27
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    相关资源
    最近更新 更多