【发布时间】:2013-01-12 17:10:57
【问题描述】:
我有两个功能。
struct logger_message vget_log_msg(enum LogStatus log_status, const char* format, va_list args) {
struct logger_message log_msg;
log_msg.status = log_status;
log_msg.timestamp = get_current_timestamp();
memset(log_msg.message_buffer, 0, MESSAGE_SIZE);
if(format){
vsprintf(log_msg.message_buffer, format, args);
}
return log_msg;
}
和
int send_log_message_to_mqueue(mqd_t mqd, enum LogStatus log_status, const char* format, ...) {
struct logger_message msg;
va_list argp;
va_start(argp, format);
msg = vget_log_msg(log_status, format, argp);
va_end(argp);
int res;
res = send_message_to_mqueue(mqd, (char *)&msg, sizeof(msg));
return res;
}
所以,我从在线 vget_log_msg 返回时收到错误“Segmentation Fault(Core dumped)”:
msg = vget_log_msg(log_status, format, argp);
编辑:也许这些信息会有用
struct logger_message{
enum LogStatus status;
time_t timestamp;
char message_buffer[MESSAGE_SIZE];
};
有人知道我为什么会收到这个错误吗?如何纠正?
【问题讨论】:
-
编译时使用
-Wall吗?您收到任何警告吗? -
是的,当然。编译项目时我没有收到任何警告或错误。
-
您的
vsprintf()是否有可能离开您的消息缓冲区的末尾?如果是这样,您是否考虑过使用vsnprintf()代替?既然你有缓冲区大小,为什么不使用它。希望您的工具链和运行时符合 C99 或更高版本,因为我相信这是我们第一次使用它的时候。
标签: c segmentation-fault return