通过指针循环遍历字符串数组
Looping through string array by pointer
我正在尝试从函数返回字符串数组并循环遍历它:
string* fetchArray()
{
string myArray[10] = { "0" };
myArray[9] = { "End" };
return myArray;
};
int main()
{
string* fetchedArray = fetchArray();
while (*fetchedArray != "End")
{
cout << *fetchedArray << endl;
fetchedArray++;
}
return 0;
}
但是,我做错了什么。这会导致运行时错误。我在调试时可以看到 *fetchedArray 在函数调用后为空,这可能意味着该函数没有返回我所期望的内容。我至少期望数组的第一个元素是正确的。
错误:
在 Test.exe 中0x54AA40D5 (vcruntime140d.dll) 引发异常: 0xC0000005:访问冲突读取位置0xCCCCCCCC。
通常,我会在这种情况下使用矢量,但我想测试这种行为。
返回指向局部变量的指针。变量myArray
与所有其他局部变量类似,一旦定义它的函数返回,它就会超出范围。这将给您留下一个指向不再存在的数据的杂散指针,并导致未定义的行为。
作为一个有趣的旁注:仅仅拥有杂散指针本身并不是 UB,但尝试取消引用指针是导致 UB 的原因。因此,您可以返回指向局部变量的指针,只要您不使用它(这毫无意义)。
您正在返回局部变量的地址,该地址在从调用返回fetchArray
后超出范围。
你返回一个指向局部变量的指针。局部变量在声明它们的函数结束时被销毁。因此,您最终会得到一个悬空的指针。取消引用会导致未定义的行为。
相关文章:
- 将C#字符串数组传递给C++
- 如何为 C 型字符串数组编写 getter 和 setter?
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 尝试将 c 字符串数组与分隔符连接起来
- 将字符串数组传递给接受常量字符**的函数
- 返回 C++ 中的字符串数组
- 如何从COM模块中的函数返回字符串数组?
- 无法将字符串数组声明为类成员而不是字符 (C++)
- 删除字符串数组
- 如何将字符串数组返回到 java JNI
- 将字符串数组作为函数参数传递
- C++将字符串数组的元素存储到变量中
- 循环访问还包含未使用元素的字符串数组
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 乘以字符串/数组和全局数组
- 递归二进制搜索与字符串数组
- 如何初始化一个标准::字符串数组?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++字符串数组的动态向量
- 给定一个等长字符串数组