为结构分配内存

时间:2010-09-11 16:33:45

标签: c pointers malloc

gcc 4.4.4 c89

我一直在“不能取消引用不完整类型”。

但是,我确信我的结构类型完整。我返回Network_t实例,它是指向已分配内存的指针。我应该能够取消那种记忆。

非常感谢任何建议,

我的头文件中有这个: driver.h

typedef struct Network_t Network_t;
Network_t* create_network(int id);

实施档案 driver.c

#include "driver.h"

struct Network_t {
    int id;
};

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

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

在我的main.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 */

2 个答案:

答案 0 :(得分:10)

main.c开始,您只能看到struct Network_t的前瞻声明。要从指向id的指针访问struct Network_t,您需要在取消引用它的位置显示结构的定义。

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

答案 1 :(得分:0)

这个有效

在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;

 }

在Network.cpp

#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]