ポインタを無効な値で上書きすることによって引き起こされるバグに問題があります。valgrind(デフォルトモード)またはGDBを使用してバグを見つけることができませんでした。なぜなら、それらは無効なポインターを指しているだけであり、そのポインターを誤った値に上書きしたものではないからです。
これは常に同じ変数ですが、明示的に不正な値に設定することはありません。プログラムの他の行は、その範囲外のメモリにアクセスしている必要がありますが、偶然に、代わりにこのポインタのストレージにヒットします。
このバグに対処するためにどのデバッグツール/オプションを使用すべきかわかりません。
クラッシュの例:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff6ffc700 (LWP 2425)]
0x00000000004058b2 in writeToConn (conn=0x7ffff0004f40) at streamHandling.c:115
115 ssize_t result = send(conn->fd, conn->head->data->string + position, conn->head->data->size - position, 0);
(gdb) print conn
$1 = (struct connection *) 0x7ffff0004f40
(gdb) print conn->head->data
$2 = (struct dbstring *) 0x35
残念ながら、conn->head->data
約5,000のconn構造体があるため、変数を単純に監視することはできません。
このコードはほとんどの場合機能しますが、適度に重い負荷で実行すると、数秒後にクラッシュします。