wait3
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<sys/resource.h>
#include<sys/time.h>
int main()
{
pid_t pid;
struct rusage *ru;
if((pid=fork())<0)
{
perror("fork error");
exit(1);
}
else if(pid==0)
{
printf("chile\n");
exit(0);
}
else
printf("parents\n");
if(wait3(NULL,0,ru)==-1)
{
perror("wait3 error");
exit(1);
}
printf("utime:%d\n",ru->ru_utime);
printf("stime:%d\n",ru->ru_stime);
printf("minflt:%d\n",ru->ru_minflt);
exit(0);
}
这样的程序会提示wait3 error: Bad address
如果把struct rusage *ru 改成struct rusage ru 然后下面的ru做相应的改动,就可以运行了,
请问各位是怎么回事,好像是结构指针的问题?谢谢
[解决办法]
只是定义了一个结构指针,并没有分配空间。。
[解决办法]
struct rusage *ru;
... ...
if(wait3(NULL,0,ru)==-1)
执行到这时,ru只是一个指针,并没有指向任何rusage类型的变量。
所以会提示wait3 error: Bad address
比如
int *ip;
*ip = 3; // error: ip没有指向变量
int i;
ip = &i; // 这个时候ip指针指向i,它才是有效的。