我有一个巨大的源代码,很少会导致未定义的行为(分段错误)。我试图追踪原因但很难,因为未定义的行为很少发生。我对源代码进行了审查,发现它包含一个空数组的定义,但在源代码中根本没有使用。
struct any array[] = {};
我知道在C中不允许定义一个空数组。但我不确定这是否是导致未定义行为的原因,尤其是未使用该数组。
即使未使用数组,定义空数组是否会导致未定义的行为?
答案 0 :(得分:1)
您应该尝试在valgrind
内存检查器的控制下运行您的程序。
valgrind
对内存访问运行多种检查,可以帮助跟踪无效的内存引用,包括那些在大多数情况下不会引起可见问题但在某些情况下可能会引发崩溃的引用。
答案 1 :(得分:0)
根据维基百科,当程序试图访问不允许访问的内存位置或尝试以不允许的方式访问内存位置时发生segmentation fault(例如,尝试写入只读位置,或覆盖部分操作系统。)
因此,在您的情况下,您没有访问变量,因此错误原因应该是其他原因。
答案 2 :(得分:0)
对于未定义的行为,一切皆有可能。您应该修改此行以符合C标准。然后,如果再次发生分段错误,您就会知道问题仍然存在。
(是的,这是一个简短的答案,但没有别的说法。)