读书人

结构体指针出现quot;Null pointer assignm

发布时间: 2012-02-13 17:20:26 作者: rapoo

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

读书人网 >C语言

热点推荐