C 为结构分配内存

C 为结构分配内存,c,pointers,malloc,C,Pointers,Malloc,通用条款4.4.4 c89 我不断得到一个无法取消对不完整类型的引用 但是,我确信我的结构类型是完整的。我返回网络实例,它是指向分配内存的指针。我应该可以取消对那个记忆的引用 非常感谢你的建议 我的头文件中有: 司机 实现文件 司机c 在我的主要演讲中 #include "driver.h" Network_t *network = NULL; network = create_network(1); printf("Network ID: [ %d ]\n", network->id)

通用条款4.4.4 c89

我不断得到一个无法取消对不完整类型的引用

但是,我确信我的结构类型是完整的。我返回网络实例,它是指向分配内存的指针。我应该可以取消对那个记忆的引用

非常感谢你的建议

我的头文件中有: 司机

实现文件 司机c

在我的主要演讲中

#include "driver.h"

Network_t *network = NULL;
network = create_network(1);
printf("Network ID: [ %d ]\n", network->id); /* Cannot dereference pointer to incomplete type */
在main.c中,只能看到结构网络的转发声明。要从指向结构网络的指针访问id,您需要结构的定义在取消引用时可见

您可以将定义从driver.c移到driver.h。

这一个有效

在driver.h中

#include <stdio.h>
#include<stdlib.h>
 struct Network_t{

     int id;

 };
 Network_t *create_network( int id){
     Network_t *network=(Network_t *)malloc(sizeof(network));

     if (network){
         network->id=id;
     }
      return network;

 }

请确保粘贴的代码与您使用的代码完全一致,而不是重新键入。驱动程序.c无法编译,因为没有;在network->id=id之后。这让我怀疑代码的其余部分。我假设您已经切掉了include行,否则可能会有不同的错误消息。我已经更正了那些include文件。谢谢。我想隐藏结构的定义。这就是为什么我没有把它放在头文件中。不管怎样,我仍然可以在不将结构定义移动到driver.h的情况下执行此操作吗?谢谢。您可以提供一个函数来访问id成员。@robUK:您可以在.c文件中写入结构网络定义,或者使用private.h文件驱动程序private.h来实现此目的。@robUK:您可以澄清您的要求吗?如果main.c知道struct Network\t有哪些成员以及需要访问这些成员,那么通过对main.c隐藏定义,您试图实现什么目的?@Joe D,这就是我所做的。谢谢。原来的帖子没有标注C++。在C语言中,头文件中包含代码是非常罕见的。
#include "driver.h"

Network_t *network = NULL;
network = create_network(1);
printf("Network ID: [ %d ]\n", network->id); /* Cannot dereference pointer to incomplete type */
#include <stdio.h>
#include<stdlib.h>
 struct Network_t{

     int id;

 };
 Network_t *create_network( int id){
     Network_t *network=(Network_t *)malloc(sizeof(network));

     if (network){
         network->id=id;
     }
      return network;

 }
#include <iostream>
#include "driver.h"
using namespace std;
int main(){

    Network_t *network=NULL;
     network=create_network(1);
     printf("Network ID:[%d]\n",network->id);
     return 0;
}
Network ID:[1]