试图从数组中读取无效数据
Posted
技术标签:
【中文标题】试图从数组中读取无效数据【英文标题】:Trying to read invalid data from array 【发布时间】:2021-03-19 07:03:11 【问题描述】:#include<iostream>
#include<string>
#include<sstream>
#include <typeinfo>
using namespace std;
int main()
setlocale(LC_ALL, "");
string str = "5 7 3";
int length = str.length();
char* arr = new char[length];
cout << arr[2] << endl;
/*
int max = stoi(string(1, arr[0]));
for (int i = 0; i < length; i++)
if(arr[i] != ' ')
if (stoi(string(1, arr[i])) > max)
max = stoi(string(1, arr[i]));
cout << max << endl;
*/
delete[] arr;
我在尝试计算 arr[2] 时收到错误 C6385“读取无效数据”。例如,当我尝试计算 arr[0] 时,我在控制台中得到 char 'H',我真的不明白如果我的 str 中没有 H,为什么会有 'H'
【问题讨论】:
arr 为空。你在哪里填写任何类型的信息?arr
是一个长度为 5 的 char 数组,但内容未知。 H
只是你当时记忆中的随机垃圾。
为什么不应该是 H?使它不是 H 的部分在哪里?
【参考方案1】:
char* arr = new char[length];
cout << arr[2] << endl;
这些是唯一对您的问题重要的行。第一个分配一个字符数组。该指针处存储在数组中的数据是未知的。它可能是零,也可能是完全的垃圾。在您的情况下,索引 2 中有时会出现“H”。如果您在一小时内运行它可能会有所不同 - 可能存储在该数组元素的内存地址的最后一个东西的 ascii 值为 H。
【讨论】:
【参考方案2】:arr[]
不包含您的 str ,因为您没有为此发生任何事情。此外,为了适应 string
内容,您需要 new char[length + 1]
来说明终止零。
毕竟,在大多数情况下,您不需要将字符串转换为数组,字符串已经包含 i。有std::stoi
函数可以处理字符串。
【讨论】:
【参考方案3】:char* arr = new char[length];
这意味着,重新分配内存并调用它arr,它作为内存长度 char* 大小,这个内存可以包含另一个运行时变量或C++不可读的东西,所以当你尝试时:
cout << arr[2] << endl;
如果你能读懂它,它会给你那个值,如“H”,但如果你不能读它,它应该什么也没有或奇怪的图标。
只需重新启动 PC,您的 arr[0] 上不会再出现一个“H”
不管怎样,你的代码看起来你需要改变它:
char* arr = new char[length];
cout << arr[2] << endl;
为:
char* arr = new char[length + 1];
【讨论】:
以上是关于试图从数组中读取无效数据的主要内容,如果未能解决你的问题,请参考以下文章