C ISMEMBER功能崩溃
C++ isMember function crash
我正在制作一个程序,该程序将测试字符串数组中的字符串存在。我做了一个简单的功能:
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"
}
导致运行时错误"分段故障:11"。我不确定问题是什么,帮助会很好。
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::array
或std::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
。
array->length();
不是数组的长度。这是阵列中的第一个std ::字符串的长度。考虑使用std :: vector of std :: string。
除非该订单在容器中很重要,否则最好选择一个std :: set(multiSet)。
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;
}
您正在比较恒定值。您仅在数组 -> length()&lt; 10然后无限地执行循环时执行循环。也
array->length()
是数组中的第一个元素(如果有!)的长度。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 在加密加密功能期间崩溃
- 如果我使用此功能,我的控制台崩溃
- 为什么这个绕道功能会使程序崩溃
- 在过程中注入性病功能后崩溃
- 搜索功能使程序崩溃
- 呼叫功能时JNI C Android应用程序崩溃
- C 如何使功能崩溃两次(32位机器)
- C 链接列表堆栈POP功能崩溃
- 当功能返回时,Linux C 系统()调用崩溃
- MySQL崩溃功能
- Clang-Linux:报告CFI错误而不会崩溃.ftrap功能和-O2
- 邻接矩阵构建功能用一些图崩溃
- 当我设置readdata并读取功能以上载文件时,libcurl会在fwrite()上崩溃
- 在基类崩溃中调用虚拟功能
- C ISMEMBER功能崩溃
- C 程序崩溃(数组和2个指针Binsearch功能)
- 队列:取消队列功能使程序崩溃
- 在 rjindael.cpp 中崩溃,使用 RSA 密钥时功能AESNI_Enc_Block
- 解密 AES 加密文件,导致崩溃的功能