我在Windows上使用gcc 5.1.0。
调用memset时,我会收到SEGFAULT,这在启用-flto标志(链接时间优化)时不会发生。
/*#### function.h ####*/
void secure_bzero (void *s,size_t size);
/*##### function.c ####*/
/* Securely erase size bytes from s */
void WEAK __attribute__((noinline)) secure_bzero (void *s,size_t size) {
memset(s,0,size);
}
当我想在CodeBlocks中调试应用程序时,我注意到了分段错误。我启用了调试符号标志(-g),并警告说-flto与-g的组合是“目前处于实验阶段,预计会产生错误的结果。”
我不明白分段错误是怎么产生的。
感谢Eugene Sh。提示完整示例:
#include "function.h"
int main(){
unsigned char seed[32];
for (int i=0; i<32; i++){
seed[i] = i;
}
secure_bzero(seed,sizeof(seed));
return 1;
}