這裏是我的程序,有誰知道爲什麼?帶有任何參數的C++函數使得分割錯誤
#include <iostream>
#include <string>
#include <stdarg.h>
using namespace std;
void say(char* name ...)
{
cout << "Hello, ";
cout << name ;
va_list ap;
va_start(ap,name);
for(;;){
char* str = va_arg(ap, char*);
if (str == 0) break;
cout << ", " << str;
}
cout << endl;
va_end(ap);
}
int main()
{
char *a = "atom";
char *b = "johhny";
char *c = "jim";
say(a,b,c);
}
當我運行它,我得到這個:
Program received signal SIGSEGV, Segmentation fault.
0x0000003f0b06fed0 in strlen() from /lib64/tls/libc.so.6
這裏是調試信息:
24 cout << "Hello, ";
(gdb) n
25 cout << name ;
(gdb) n
27 va_start(ap,name);
(gdb) n
30 char* str = va_arg(ap, char*);
(gdb) n
31 if (str == 0) break;
(gdb) n
32 cout << ", " << str;
(gdb) n
29 for(;;){
(gdb) n
30 char* str = va_arg(ap, char*);
(gdb) n
31 if (str == 0) break;
(gdb) n
32 cout << ", " << str;
(gdb) n
29 for(;;){
(gdb) n
30 char* str = va_arg(ap, char*);
(gdb) n
31 if (str == 0) break;
(gdb) n
32 cout << ", " << str;
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0x0000003f0b06fed0 in strlen() from /lib64/tls/libc.so.6
(gdb) n
Single stepping until exit from function strlen,
which has no line number information.
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
'if(str == 0)break;' - 這在實踐中做了什麼? –
下次您在調試器中逐步完成一些代碼,並且知道發生崩潰的時間和位置時,請*查看所涉及的變量。這會爲你節省很多時間。 –
偏題:如果你可以使用C++ 11,看一下可變參數模板。它可以實現完全相同的事情,並具有更高的安全性(您可以傳遞編譯時已知的不同類型,參數數目在編譯時已知,...) – Garf365