【问题标题】:assigning value to member of struct via pointer通过指针为结构成员赋值
【发布时间】:2012-09-20 17:29:19
【问题描述】:

我可能犯了一些非常愚蠢的错误,但我找不到它,很简单:

int main()
{

typedef struct drzemka typ;
struct drzemka {     
int strukcje;
};
typ *d;
d->strukcje = 1;
}

它不工作

【问题讨论】:

  • 阅读编译器发出的警告。应该说一下未初始化变量d的使用。
  • gcc 在编译时没有给出错误。
  • @BSull:尝试开启一些合理的警告设置,例如-Wall,您会清楚地看到“警告:在此函数中使用了未初始化的‘d’”。
  • 是的,我只是说这不是编译错误。

标签: c pointers structure


【解决方案1】:

现在您的指针未设置为有效的内存。你需要为struct分配这块内存:

#include <stdlib.h>
/* ... */
typ *d = malloc(sizeof(typ));

与您分配的任何内存一样,请记住在完成后释放它:

free(d);

【讨论】:

  • 我仍然想知道为什么将结构放在 main() 范围内无论如何都是好的
  • @Yarneo:不好。它不是标准的 C,尽管 GCC 允许它作为扩展。该结构应在main 之外定义。
  • 为@AdamRosenfield 的快速响应干杯
【解决方案2】:

您需要将d 分配给有效的值。你必须给它一些记忆。现在它是一个typ 类型的指针,它没有指向任何东西。然后你就试图尊重虚无。

要么将堆中的一些内存分配给您的指针,然后按原样使用它:

typ *d = malloc(sizeof(typ)); 
d->strukcje = 1;
free(d);

或者在栈上放一个静态副本:

typ d;
d.strukcje = 1; 

【讨论】:

    【解决方案3】:

    正确的代码是:

    struct drzemka {     
    int strukcje;
    };
    typedef struct drzemka typ;
    
    
    int main()
    {
       typ d;
       d.strukcje = 1;
    }
    

    int main()
    {
     typ* d = (typ *) malloc(sizeof(typ));
     d->strukcje = 1;
    
    }
    

    【讨论】:

      【解决方案4】:

      试试这个:

      typedef struct drzemka {     
          int strukcje;
      }typ;
      
      int main() {
          typ d;
          typ * p = &d;
          p->strukcje = 1;
          printf("The value of strukcje is %d",p->strukcje);
      }
      

      【讨论】:

        猜你喜欢
        • 2013-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-22
        • 2021-04-06
        • 1970-01-01
        • 1970-01-01
        • 2011-01-20
        相关资源
        最近更新 更多