结构体指针出现"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])); 改了
我试了一下上面这样写是没问题的