r****y 发帖数: 1437 | 1 【 以下文字转载自 Programming 讨论区 】
【 原文由 rossby 所发表 】
我写了个程序,两个,几乎一模一样,但是一个在UNIX下给出正确
结果另外一个segmentation fault . 到Linux 下一试,还是一样.晕了.
给出正确结果的程序
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "sys/time.h"
void main (int argc, char *argv)
{
int i, j;
struct timeval *tp;
struct timezone *tz=NULL;
i = gettimeofday(tp, tz);
printf("flag %d\n ", i);
printf("time %ld\n", tp->tv_sec);
printf("time %ld\n", tp->tv_usec);
}
segmentation fault的程
#include "stdio.h"
#include "stdlib.h"
#i | n******d 发帖数: 1 | 2 tp不应当是指针,换成结构吧
【在 r****y 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 【 原文由 rossby 所发表 】 : 我写了个程序,两个,几乎一模一样,但是一个在UNIX下给出正确 : 结果另外一个segmentation fault . 到Linux 下一试,还是一样.晕了. : 给出正确结果的程序 : #include "stdio.h" : #include "stdlib.h" : #include "math.h" : #include "sys/time.h" : void main (int argc, char *argv)
| l*****y 发帖数: 58 | 3
呵呵, 你犯了个典型的不懂指针概念的错误。
man gettimeofday , 你会看到
"int gettimeofday(struct timeval *tp, void *);"
"If tp is a null pointer, the current time information is not
returned or set."
而你在后面使用了 tp->*****
作为一个指针,怎么可以不开一块内存就使用呢?
这样使用指针其后果是不可预测的, 第一个程序
没出错并不意味着它就对。 两个都是错的。
看看 timeval结构的大小,照样分块内存给tp就没事了.
不想查的话,就往大了给,反正不用也是给猪吃了。
【在 r****y 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 【 原文由 rossby 所发表 】 : 我写了个程序,两个,几乎一模一样,但是一个在UNIX下给出正确 : 结果另外一个segmentation fault . 到Linux 下一试,还是一样.晕了. : 给出正确结果的程序 : #include "stdio.h" : #include "stdlib.h" : #include "math.h" : #include "sys/time.h" : void main (int argc, char *argv)
| a**n 发帖数: 313 | 4
It seems that what you said is not correct.
tp of course should be ptr to struct timeval.
What you need to do is to allocate memory for *tp,
so after struct timeval *tp ;
add
tp=(struct timeval*)malloc(1);
【在 n******d 的大作中提到】 : tp不应当是指针,换成结构吧
| w*****g 发帖数: 7 | 5 其实都对,只有分配一块内存给tp就可以了。即可以从heap中
分配(用malloc),也可以从栈上分配(换成结构):
struct timeval t;
struct timeval* tp = &t;
那个程序的问题在于tp没有初始化。
【在 a**n 的大作中提到】 : : It seems that what you said is not correct. : tp of course should be ptr to struct timeval. : What you need to do is to allocate memory for *tp, : so after struct timeval *tp ; : add : tp=(struct timeval*)malloc(1);
|
|