以下代码在 64 位系统中崩溃。如果文件名长度小于3,
然后'len'
发生下溢。但这个程序没有显示任何
32 位系统中的段错误。但我在 64 中遇到段错误
位系统。为什么这个程序在 32 位中没有显示任何段错误
系统?
DIR * dirp = opendir(dirPath);
struct dirent * dp;
while(dirp)
{
if((dp = readdir(dirp)) != NULL)
{
unsigned int len = strlen(dp->d_name);
//underflow happens if filename length less than 3
if((dp->d_name[len - 3] == 'j'))
}
}
最佳答案
正如您所知,您的编程会导致未定义的行为。您正在尝试访问数组范围之外的内容。未定义的行为正如其听起来的那样。行为未定义。什么事情都可能发生。
您可能会在运行时遇到段错误,而另一次则不会。或者您可能会在不同的编译器下看到不同的行为。未定义的行为本质上是不可预测的。事实上,您似乎在一个编译器下的代码中逃脱了这个错误,但这并不意味着您的代码是正确的。
显然,您应该做的是避免编写导致未定义行为的程序。
关于c++ - 64位系统下程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24385052/