由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Unix版 - [转载] 活见鬼了---搞不定的程序
相关主题
[转载] UNIX下的strtok[转载] Anyone ever installed Solaris 8 on PC?
偶要疯了![转载] 有没有人对High Performance Fortran很熟的
fork() and execve() in UnixHelp wanted for CURSES
大侠帮忙看看这段程序,想不通emacs问题求教----有关C程序格式
codeinterview question
如何在Linux/Unix下获取微秒级的进程时间?awk question
Linux/Unix下时间的精度 (转载)问一个Unix Shell Script 的问题
[转载] 再问个关于UNIX的问题A problem about child process.
相关话题的讨论汇总
话题: tp话题: timeval话题: include话题: struct话题: 程序
进入Unix版参与讨论
1 (共1页)
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);

1 (共1页)
进入Unix版参与讨论
相关主题
A problem about child process.code
关于CPU时间急问!如何在Linux/Unix下获取微秒级的进程时间?
UNIX文件系统一问Linux/Unix下时间的精度 (转载)
[转载] Help, about clock().[转载] 再问个关于UNIX的问题
[转载] UNIX下的strtok[转载] Anyone ever installed Solaris 8 on PC?
偶要疯了![转载] 有没有人对High Performance Fortran很熟的
fork() and execve() in UnixHelp wanted for CURSES
大侠帮忙看看这段程序,想不通emacs问题求教----有关C程序格式
相关话题的讨论汇总
话题: tp话题: timeval话题: include话题: struct话题: 程序