该程序中分段错误的原因是什么?

时间:2015-05-25 15:46:03

标签: c++ algorithm pointers

我正在练习我的代码高尔夫"或者编写类似访谈的问题,并且无法弄清楚我在下面遇到分段错误的原因:

#include <iostream>

bool contained ( char * str1, char * str2 )
{
// returns true or false depending on whether the string str1 is contained in str2
    while (str2)
    {
       if (*str1 == *str2)
       {
           char * temp = str2; 
           while (*str1++ == *temp++);
           if (!*str1) return true;
       }
       else 
       {
           ++str2;
       }
    }
    return false;
}

int main () 
{
   char sa [] = "abc"; 
   char sb [] = "rehabc132";
   std::cout << contained(sa, sb); // should print out 1
   return 0;
}

证明:http://codepad.org/5Ff3qTIX

任何想法为什么?

1 个答案:

答案 0 :(得分:0)

错误1:外部循环应为while (*str2),否则您将超出范围并冒着段错误的风险。

错误2:内部循环应检查字符串是否都没有结束:while (*str1 && *temp && *str1++ == *temp++ );

错误3:在内部循环中,您松开了您正在寻找的字符串的开头(str1)。所以你应该使用另一个临时指针。我将把那部分留给你作为练习。