首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

结构体指针出现"Null pointer assignment"该如何解决

2012-02-13 
结构体指针出现Null pointer assignment#definePROCESSNUMBER5#defineRESOURCENUMBER3intprocessnumber

结构体指针出现"Null pointer assignment"
#define   PROCESSNUMBER   5  
#define   RESOURCENUMBER   3  

int   processnumber=PROCESSNUMBER;
int   resourcenumber=RESOURCENUMBER;

struct   ProcessResource
{
      int   pid;
      int   Finish;
      int   max_resource[RESOURCENUMBER];
      int   allocation_resource[RESOURCENUMBER];
      int   need_resource[RESOURCENUMBER];
};


struct   ResourceList
{
      int   ProcessNumber;
      int   Available[RESOURCENUMBER];
      struct   ProcessResource   process[PROCESSNUMBER];
};

void   init()
{
      processnumber=PROCESSNUMBER;
      resourcenumber=RESOURCENUMBER;
}

void   resource_init(struct   ResourceList   *List)
{
      int   rndNum=0;
      int   resourceCount=0,processCount=0;
      printf( "%d   Availbale:\n ",resourcenumber);
      for(resourceCount=0;resourceCount <resourcenumber;resourceCount++)                      
            scanf( "%d ",List-> Available[resourceCount]);             /*第二次输入时自动跳出,错误提示:Null   pointer   assignment*/
}

void   main(char   args[])
{
      struct   ResourceList   *list;
      init();
      resource_init(list);
}
--------------------------------


[解决办法]
struct ResourceList *list;这个东西你没有初始化就使用,当然会错误了
[解决办法]
list没有具体的指向吧
内存泄露问题
[解决办法]
先要用malloc函数分配空间
[解决办法]
void resource_init(struct ResourceList *List)
{
int rndNum=0;
int resourceCount=0,processCount=0;
printf( "%d Availbale:\n ",resourcenumber);
for(resourceCount=0;resourceCount <resourcenumber;resourceCount++)
scanf( "%d ",List-> Available[resourceCount]); /*第二次输入时自动跳出,错误提示:Null pointer assignment*/
}

void main(char args[])
{
struct ResourceList *list;
init();
resource_init(list);
}
修改为

void resource_init(struct ResourceList *List)
{
int rndNum=0;
int resourceCount=0,processCount=0;
printf( "%d Availbale:\n ",resourcenumber);
for(resourceCount=0;resourceCount <resourcenumber;resourceCount++)
scanf( "%d ",&(List-> Available[resourceCount])); /*第二次输入时自动跳出,错误提示:Null pointer assignment*/
}

int main(int argc, char* argv[])
{
struct ResourceList *list = (struct ResourceList *)malloc( sizeof(struct ResourceList ) );
init();
resource_init(list);

return 0;
}
[解决办法]
list=(struct ResourceList *)malloc(sizeof(struct ResourceList))
[解决办法]


to:akirya(坏[其实偶不是什么所谓的坏人])

scanf( "%d ",&(List-> Available[resourceCount]));
这行不太能理解,ListList-> Available[resourceCount] 不就是一地址了吗?为什么还要这么做呢?

另外为什么我
void main(char args[])
{
int request[RESOURCENUMBER+1];
struct ResourceList list;/*ok*/
init();
resource_init(&list);
}

这样做也是错的呢?

你把scanf( "%d ",&(List-> Available[resourceCount])); 改了
我试了一下上面这样写是没问题的

热点排行