- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是代码:
void i_log_ (int error, const char * file, int line, const char * fmt, ...)
{
/* Get error description */
char * str_err = get_str_error (errno);
remove_trailing_newl (str_err);
/* Format string and parameters */
char message [1024];
va_list ap;
va_start (ap, fmt);
vsprintf (message, fmt, ap);
va_end (ap);
/* Get time */
time_t t = time (NULL);
char stime [64];
char * temp = ctime (&t);
strncpy (stime, temp, sizeof stime - 1);
remove_trailing_newl (stime);
FILE * log;
#ifdef __WIN32__
#else
# ifdef P_LISTENER
log = fopen (I_LOG_FILE, "a+b");
flock (fileno (log), LOCK_EX);
# else /* shared file descriptor of log, lock before opening */
pthread_mutex_lock (& mutex);
log = fopen (I_LOG_FILE, "a+b");
# endif
#endif
if (log) {
if (error)
fprintf (log, ERR_FORMAT, stime, file, line, str_err, message);
else
fprintf (log, ERR_FORMAT_NO_ERRNO, stime, file, line, message);
}
#ifdef __WIN32__
free (str_err);
#else
# ifdef P_LISTENER
flock (fileno (log), LOCK_UN);
fclose (log);
# else
fclose (log);
pthread_mutex_unlock (& mutex);
# endif
#endif
return;
}
虽然有锁机制,但在这种情况下函数并没有被并发调用,所以我认为这不是问题所在。但是,该程序收到一个 SIGABRT
:
[...]
(gdb) c
Continuing.
Program received signal SIGHUP, Hangup. // It's OK, I sent this.
0x00dee416 in __kernel_vsyscall ()
(gdb) c
Continuing.
Program received signal SIGABRT, Aborted.
0x00dee416 in __kernel_vsyscall ()
(gdb) up
#1 0x0013ae71 in raise () from /lib/i386-linux-gnu/libc.so.6
(gdb) up
#2 0x0013e34e in abort () from /lib/i386-linux-gnu/libc.so.6
(gdb) up
#3 0x00171577 in ?? () from /lib/i386-linux-gnu/libc.so.6
(gdb) up
#4 0x0017b961 in ?? () from /lib/i386-linux-gnu/libc.so.6
(gdb) up
#5 0x0017d28b in ?? () from /lib/i386-linux-gnu/libc.so.6
(gdb) up
#6 0x0018041d in free () from /lib/i386-linux-gnu/libc.so.6
(gdb) up
#7 0x0019b0d2 in ?? () from /lib/i386-linux-gnu/libc.so.6
(gdb) up
#8 0x0019b3c5 in ?? () from /lib/i386-linux-gnu/libc.so.6
(gdb) up
#9 0x00199a9f in localtime () from /lib/i386-linux-gnu/libc.so.6
(gdb) up
#10 0x00199951 in ctime () from /lib/i386-linux-gnu/libc.so.6
(gdb) up
#11 0x08049634 in i_log_ (error=0, file=0x804b17d "src/group.c", line=53, fmt=0x804b128 "Setting up new configuration: listener type: %s, number: %d, http-log: %s, port: %d.") at src/error.c:42
42 char * temp = ctime (&t);
(gdb) print temp
$1 = 0x260000 ""
(gdb) print t
$2 = 1329935482
(gdb) print &t
$3 = (time_t *) 0xbff8a5b8
(gdb)
我没有任何线索。 ctime
返回一个空字符串,手册页没有提到这种情况。现在想想,我不明白为什么它会返回一个空字符串,以及该代码有什么问题。
感谢任何帮助。
最佳答案
ctime
未返回空字符串。它根本还没有返回,因为它在尝试做它的事情时崩溃了。
崩溃发生在 free()
内部,因此您可能在调用 ctime()
之前的某个时刻损坏了内存。如果您在受支持的平台上运行,请尝试使用 Valgrind 等工具来检查您的内存访问。
关于ctime() 导致 SIGABRT(?!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9401179/
我对 glibc ctime() 的工作原理有疑问。 按照我的代码片段: #include #include #include int main (int argc,char*
当我使用“ctime”时,curTime 和 pastTime 得到相同的字符串结果,即使 curTime 和 pastTime 的实际值相差 600 秒。 使用 ctime 时如何为两者获得相同的字
我有这个unix时间戳,使用ctime转换后显示为Thu Mar 26 15:30:26 2007,但我只需要Thu Mar 26 2007。 如何更改或截断以消除时间 (HH:MM:SS)? 最佳答
我在文本文件中插入时间时遇到问题。我使用以下代码得到 |21,43,1,3,10,5| Wed Feb 01 20:42:32 2012 这是正常的,但我想做的是将时间放在数字之前,例如 Wed Fe
我已将 ctime 值转换为 unicode 1295478503.6789999到'2011 年 1 月 19 日星期三 18:08:23' 我可以倒退吗?从第二行到第一行? 最佳答案 您需要 Py
ctime()函数应该给出自 Epoch 以来传入的秒数的字符串格式时间。这是我的代码: #include #include #include int main(int argc, int **arg
#include #include #include using namespace std; #define WIDTH 118 #define HEIGHT 60 void clearScr
我在将 ctime 字符串转换为 %Y-%m-%d 格式时遇到问题。 fileobject = "C:\\foo\\bar.txt" filetime = time.ctime(os.path.get
你好, 我有以下代码: int main () { time_t rawtime; time ( &rawtime ); printf ( "The current local time
我正在尝试更改我的 unix 时间戳的格式。但我没有看到任何自定义格式的选项。 这是我的代码: tempstring = "Your last login was: "; time_t lastLog
我正在使用 ctime。但是它总是返回 NULL。所以它以 sprintf 行为核心。它工作得更早。所以不确定为什么会随机返回 NULL? 我有以下代码片段: int main() { cha
如果用户类型time_t定义为__darwin_time_t,在MacOS X中它本身定义为long,为什么会出现下面的代码输出8 时间是(null)?也许这很愚蠢,但我真的无法理解。 #includ
我正在使用 ctime。但是它总是返回空值。所以它以 sprintf 线为核心。它工作得更早。所以不确定为什么它会随机返回 null。 我有以下代码片段: int main() { char avp
这是代码: void i_log_ (int error, const char * file, int line, const char * fmt, ...) { /* Get erro
标准 C ctime 函数是否返回公历日期?特别是,我想验证它是否会考虑闰年,从而显示相应日期的 Feb 29。 最佳答案 对于 future 和最近的时间,是的。对于公历改革之前的时间...我不知道
我有这样一个函数: void ft_display_time(struct timespec ttime) { char *time_long; time_long = cti
我试图让一个循环在 executionTime 指定的准确时间执行。我正在使用 ctime 来获得这个时间,我需要它在几毫秒的精度内(我相信它是)。一旦该循环运行了指定的执行时间,它就会中断。 我的问
我正在寻找 的 C++11 版本图书馆。 C++11 中有这样的东西吗? 编辑:任何具有更多功能的东西都是完美的! 编辑 2:我希望将其与我正在制作的游戏一起使用,以便我可以跟踪玩的总时间。我正在寻
我正在使用 ctime函数来获取 time_t 变量的可读表示。 ctime声明如下: char *ctime (const time_t *timer); 你可以看到它返回了一个指向结果 char
linux下的find命令在目录结构中搜索文件,并执行指定的操作。linux下的find命令提供了相当多的查找条件,功能很强大,由于find的功能很强大,所以他的选项也很多,今天我们来细说一下fin
我是一名优秀的程序员,十分优秀!