- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下示例程序,它使用预处理器定义一个简单的调试函数。
main.c
#include <stdio.h>
#ifdef DEBUG
#define __DEBUG 1
#else
#define __DEBUG 0
#endif
#define dbg_out(fmt, ...) \
do {if (__DEBUG) fprintf(stdout, "%s:%s:%s():" fmt "\n", __FILE__, \
__LINE__, __FUNCTION__, __VA_ARGS__); } while (0)
int main (int argc, char **argv)
{
dbg_out ("Printing argc: %d", argc);
return 0;
}
我使用调试符号和定义的 DEBUG 来编译它,如下所示:
gcc main.c -g -DDEBUG -o test.exe
现在,当我编译该程序并运行它时,我得到一个带有以下回溯的 SIGSEGV
:
Program received signal SIGSEGV, Segmentation fault.
0x75b7b090 in vswprintf () from C:\Windows\SysWOW64\msvcrt.dll
(gdb) bt
#0 0x75b7b090 in vswprintf () from C:\Windows\SysWOW64\msvcrt.dll
#1 0x75b73633 in msvcrt!fprintf () from C:\Windows\SysWOW64\msvcrt.dll
#2 0x75bb1228 in msvcrt!_iob () from C:\Windows\SysWOW64\msvcrt.dll
#3 0x0040a070 in __register_frame_info ()
#4 0x00401425 in main (argc=1, argv=0x4a2f08) at src/main.c:16
GCC (MinGW) 版本为 4.8.1
。为什么会发生这种崩溃?如何解决?
最佳答案
预处理器宏 __LINE__
不是 char *
,而是 int
,因此:
#define dbg_out(fmt, ...) \
do {if (__DEBUG) fprintf(stdout, "%s:%s:%s():" fmt "\n", __FILE__, \
__LINE__, __FUNCTION__, __VA_ARGS__); } while (0)
需要:
#define dbg_out(fmt, ...) \
do {if (__DEBUG) fprintf(stdout, "%s:%d:%s():" fmt "\n", __FILE__, \
__LINE__, __FUNCTION__, __VA_ARGS__); } while (0)
请注意,如果在启用警告的情况下进行编译(例如 gcc -Wall ...
),gcc
会警告您这一点。
关于c - MinGW fprintf (vswprintf) 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33605512/
使用 10 月 2 日发布的 Symbian S60 第 5 版 SDK,我正在编译/运行(在 sim 上)以下代码片段: void test(wchar_t *dest, int size, con
我仍然是 C 的新手,甚至对 C 中的宽字符更陌生。 下面的代码应该显示 蓝 Sprite 4分 但它显示 蓝 Sprite 4分 在 gdb 中,我看到这个: (gdb) p buffer $1 =
有谁知道什么时候可以使用 vswprintf_l 而不是 vswprintf ? 谢谢 最佳答案 不同之处在于,vswprintf_l 在末尾添加一个 locale_t 类型的额外参数。这意味着您可以
我有以下示例程序,它使用预处理器定义一个简单的调试函数。 main.c #include #ifdef DEBUG #define __DEBUG 1 #else #define __DEBUG 0
我正在尝试使用 MinGW 在 Windows 上编译 Botan,但在编译期间收到以下错误: c:\qt\2010.04\mingw\bin\../lib/gcc/mingw32/4.4.0/inc
我有一个使用 _vscwprintf()/vswprintf() 的项目(通过 _vsctprintf()/_vstprintf()) 在 malloc()ed 缓冲区中创建任意长度的格式化字符串。
到目前为止,我已经在 visual studio 中编写了所有代码,现在我需要向其中添加一些 UI,因此我将使用 Qt。所以我在我的项目中添加了每个文件(主类除外),然后尝试使用 Qt 编译它。因为我
使用 Borland C++ Builder 2009 我根据 RAD Studio 的帮助 (F1) 使用 vswprintf : int vswprintf(wchar_t *buffer, co
为了提供更多细节,我正在使用 XCode 4.2 和 LLVM GCC 4.2.2 编译器使用 C 为 OS X 编写代码。 我有一个可变参数函数 - 为了完整起见,我包含了整个函数,尽管我/相信/其
我需要为格式函数 vswprintf() 分配足够的缓冲区。当用 ANSI 字符串做同样的事情时,我使用: vsnprintf( NULL, NULL, pszFormat, args ); 它返回我
我从 vswprintf 使用 GCC 和 Mac OS X(在 Mac OS X 10.6 和 10.8 下使用 gcc 4.0 和 4.2.1 测试。Linux 下的 GCC 是不受影响。Visu
我需要实现一个函数来格式化宽字符字符串并返回 std::wstring。我的实现是: std::wstring format(const wchar_t* fmt, ...) { std::w
我是一名优秀的程序员,十分优秀!