段错误 是指内存越界,访问了不该访问的内存。原因有很多,这里记录一种可以触发偶现段错误的一种原因:
typeof struct a_t {
char b[100];
int L;
} A;
int main() {
A *a = (A *)malloc(sizeof(A));
dosomething(a);
string b = string(a->b, a->L);
return 0;
}
如上代码片段:
大部分时间是没有问题的。可是偶发段错误。
原因是malloc之后没有对a作初始化,然而malloc是随机初始化的,只不过大概率给初始化为0了,为0时不会出问题。一旦随机不为0,就是一个很大的值,导致段错误。