C ++ isMember函数崩溃

时间:2014-02-05 16:36:04

标签: c++ function crash segmentation-fault runtime-error

我正在制作一个程序,用于测试字符串数组中字符串的存在。我做了一个简单的功能:

bool isMemberOfArrayStr(std::string str, std::string array[256]){
  for(int i=0;array->length()<10;i++){
    if(array[i]==str){
      ret=true;//A global variable that will be reset to false after the function call
    }
  }
  return ret;
}

函数的定义不会导致错误,但调用:

if(neighbors[2] == isMemberOfArrayStr(neighbors[2], validTokens))
{
  std::cout <<"true"
}

导致运行时错误“Segmentation fault:11”。 我不确定问题是什么,帮助会很好。

3 个答案:

答案 0 :(得分:1)

array->length(); 

不是数组的长度。这是数组中第一个std :: string的长度。 考虑使用std :: vector of std :: string。

除非订单在容器中很重要,否则最好选择std :: set(multiset)。

答案 1 :(得分:1)

bool isMemberOfArrayStr(std::string str, std::string array[256])

衰败到

bool isMemberOfArrayStr(std::string str, std::string* array)

正确的原型是

bool isMemberOfArrayStr(std::string str, std::string (&array)[256])

但您可以使用std::arraystd::vector语法更好(更直观)。

然后array->length()不是256,而是数组第一个字符串的长度。

您的功能可能会被重写(C ++ 11):

bool isMemberOfArrayStr(const std::string& str, std::string (&array)[256]) {
    ret = std::find(std::begin(array), std::end(array), str) != std::end(array);
    return ret;
}

C ++ 03:

bool isMemberOfArrayStr(const std::string& str, std::string (&array)[256]) {
    ret = std::find(array, array + 256, str) != array + 256;
    return ret;
}

我认为你应该从这个功能中删除ret

答案 2 :(得分:0)

bool isMemberOfArrayStr(std::string str, std::string array[256]){
  for(int i=0;array->length()<10;i++){
                     ^^^^^^^^^^
    if(array[i]==str){
      ret=true;//A global variable that will be reset to false after the function call
    }
  }
  return ret;
}

你正在比较常数值。只有当array-&gt; length()&lt; 10然后无限次地执行它时,才执行for循环。还

array->length()

是数组中第一个元素(如果有的话)的长度。