C++程序运行时遇到SIGILL信号,无效的花费了一天的时间不得解决,后来才发现问题的所在,请看问题段的代码:
string ConnectStr1;
string ConnectStr2;
char LogDirectory[256];
memset(LogDirectory,0,256);
snprintf(LogDirectory,256,
"%s/%s",
ConnectStr1.c_str[],
ConnectStr2 );
运行程序时提示在memset(LogDirectory,0,256);的时候产生了SIGILL信号,一般该信号表示越界分配内存等信息,问题就出在拼接LogDirectory的snprintf函数,因为ConnectStr2是string类型的,但是又没有转换成c风格字符串,所以在该处越界了!
总结一下:
编译时必须把所有的warning都给fix掉,因为仅仅编译通过,而留有warning,在运行时可能会产生上述的SIGILL等其他错。