高手帮忙看下
#ifdef _WIN32
#define log1(sock_logr, s, a1) \
do { \
struct timeb __log_buft; \
char __log_buf[2048] = {0}; \
ftime(&__log_buft); \
_snprintf(__log_buf, 2047, "%d.%03d:%s:%d:" s "\n", __log_buft.time, __log_buft.millitm, "client.c", __LINE__, (a1)); \
write2((sock_logr), __log_buf, (INT32) strlen(__log_buf)); \
if (TEST_DEBUG && g_pDbgFile != NULL) fprintf(g_pDbgFile, "LOGGED: %s", __log_buf);\
} while(false)
#else
#define log1(sock_logr, s, a1) \
do { \
struct timeb __log_buft; \
char __log_buf[2048]; \
ftime(&__log_buft); \
snprintf(__log_buf, 2048, "%d.%03d:%s:%d:" s "\n", __log_buft.time, __log_buft.millitm, "client.c", __LINE__, (a1)); \
write2((sock_logr), __log_buf, (INT32) strlen(__log_buf)); \
if (TEST_DEBUG && g_pDbgFile != NULL) fprintf(g_pDbgFile, "LOGGED: %s", __log_buf);\
} while(false)
#endif
同样都是上面的代码,Linux下运行正常,Windows下竟然在_sanprintf里面报错...
堆栈如下:
>xec.exe!_output_l(_iobuf * stream=0x0012e5c8, const char * format=0x0041a288, localeinfo_struct * plocinfo=0x00000000, char * argptr=0x0012e5fc) 行1648 + 0x1 字节C++
xec.exe!_snprintf(char * string=0x0012e784, unsigned int count=0x000007ff, const char * format=0x0041a288, ...) 行130 + 0x1e 字节C
xec.exe!XProbe(unsigned int sServerLog=0x001ebb10) 行1130 + 0x5d 字节C++
ws2_32.dll!776a305c()
[下面的框架可能不正确和/或缺失,没有为 ws2_32.dll 加载符号]
ws2_32.dll!776ac549()
xec.exe!XInit(const char * pchIP1=0x0012ff24, const char * pchIP2=0x0012ff10, unsigned int * psServerLog=0x0012fdb8, char * pchID=0x0054205b, int * pnErrCode=0x0012fdb4) 行175 + 0x15 字节C++
xec.exe!main(int argc=0x00000005, char * * argv=0x00542000) 行76 + 0x23 字节C++
xec.exe!__tmainCRTStartup() 行327 + 0x12 字节C
kernel32.dll!76f31174()
ntdll.dll!775ab3f5()
ntdll.dll!775ab3c8()
[解决办法]
不明白,帮顶
[解决办法]
双击_snprintf,然后看变量的值
[解决办法]
不明白,帮顶..
[解决办法]
具体出什么错呢?
xec.exe!_output_l(_iobuf * stream=0x0012e5c8, const char * format=0x0041a288, localeinfo_struct * plocinfo=0x00000000, char * argptr=0x0012e5fc)
这几个参数看上去也没什么问题。
[解决办法]
尝试下:snprintf_s
[解决办法]
windows下什么是这个函数呢 _snprintf
用snprintf也可以啊
[解决办法]
_output_l 这代码都是给出的,可以跟进去看看到底是什么问题。
[解决办法]
define log1(sock_logr, s, a1)
_snprintf(__log_buf, 2047, "%d.%03d:%s:%d:" s "\n", ...,(a1)
应该是s和a1的问题,估计某个格式化参数linux和win32支持不太一样,看不到你的实际宏参数,没法判断详细情况
找到调用的地方,看看s和a1是什么玩意儿
[解决办法]
猜测:可能_sanprintf的动态链接库链接失败,那么是你的库有问题或编译器出错
------解决方案--------------------
看看说的是哪个指针无效了。
堆栈上那几个地址看上去还是比较正常的。
[解决办法]
chbuf不是0结尾的...访问地址越界了