C++ 为什么我的代码会给我一个内存错误?c++;

C++ 为什么我的代码会给我一个内存错误?c++;,c++,arrays,memory,C++,Arrays,Memory,我正在尝试创建一个模拟物品购买菜单。如果有人能告诉我为什么向量返回-858993460,而不是我试图通过数组读入的int值,我会非常感激。我试着像数组一样读取它,它说我有内存问题。我被卡住了 以下是我声明的相关变量 string exit, storeChoice; double balance = 10000; bool store = true; const int inv = 10; unsigned int i = 0; unsigned int Choice; int iLimit[i

我正在尝试创建一个模拟物品购买菜单。如果有人能告诉我为什么向量返回-858993460,而不是我试图通过数组读入的int值,我会非常感激。我试着像数组一样读取它,它说我有内存问题。我被卡住了

以下是我声明的相关变量

string exit, storeChoice;
double balance = 10000;
bool store = true;
const int inv = 10;
unsigned int i = 0;
unsigned int Choice;
int iLimit[inv], categoryChoice;
vector<int> invVec;
字符串退出,storeChoice;
双倍余额=10000;
布尔存储=真;
常数int inv=10;
无符号整数i=0;
无符号整数选择;
int iLimit[inv],类别选择;
向量invVec;
这是发生错误的行和VisualStudio上的错误弹出窗口。 不能选择; 选择>>iLimit[i]; 如果(选项!=0) { 投资推回(iLimit[i]); 对于(i=0;inVec.size();i++) { 我想这是因为

cout << invVec.at(iLimit[i]) << endl; // Trying to display inventory.. Memory 
但是当您使用.at(n)访问时,n必须是索引而不是值

因此,在您的情况下,您应该稍微改变您的循环,使其成为

for(i = 0;i < invVec.size();i ++) {
    cout << invVec.at(i) << endl; // Trying to display inventory.. Memory 

}
(i=0;i{ 我想这是因为

cout << invVec.at(iLimit[i]) << endl; // Trying to display inventory.. Memory 
但是当您使用.at(n)访问时,n必须是索引而不是值

因此,在您的情况下,您应该稍微改变您的循环,使其成为

for(i = 0;i < invVec.size();i ++) {
    cout << invVec.at(i) << endl; // Trying to display inventory.. Memory 

}
(i=0;i{ 库特 这和你想的不一样,我想你是说

iLimit[i] = Choice;
>>运算符已重载字符串类型(以及cin、cout等)以将值从一种类型复制到另一种类型。但ints的情况并非如此,其中>>是位移位运算符。它不会修改任何操作数,而是返回结果(您只是忽略了结果),类似于:

Choice + iLimit[i];
这意味着您的iLimit数组中永远不会放入任何内容,因此当您离开时,它只会充满垃圾(例如-858993460)

invVec.at(iLimit[i])
你基本上在做什么

invVec.at(-858993460)
这显然不是向量的有效索引,因此内存错误

这和你想的不一样,我想你是说

iLimit[i] = Choice;
>>运算符已重载字符串类型(以及cin、cout等)以将值从一种类型复制到另一种类型。但ints的情况并非如此,其中>>是位移位运算符。它不会修改任何操作数,而是返回结果(您只是忽略了结果),类似于:

Choice + iLimit[i];
这意味着您的iLimit数组中永远不会放入任何内容,因此当您离开时,它只会充满垃圾(例如-858993460)

invVec.at(iLimit[i])
你基本上在做什么

invVec.at(-858993460)


这显然不是向量的有效索引,因此内存错误。

在哪一行?调试器是否提供任何洞察?您确定
invVec
有9个条目?这似乎是一个巨大的假设。我建议:
for(auto&&item:invVec){std::cot Welcome to Stack Overflow。请查看我们的,特别注意上的页面。您没有为我们提供足够的代码来重现错误,并且您发布的许多代码似乎与问题无关。您好,我将简化代码以更好地显示错误。我正在尝试向控制台打印包含数据的向量我正在从一个数组中读取用户的输入。之后我尝试了cout,发现最新的代码看起来非常错误。你确定你的意思不是说cout在哪一行?调试器提供了任何细节吗?你确定
invVec
有9个条目吗?这似乎是一个巨大的假设。我建议:
for(auto&&item:invVec){std::cot Welcome to Stack Overflow。请查看我们的,特别注意上的页面。您没有为我们提供足够的代码来重现错误,并且您发布的许多代码似乎与问题无关。您好,我将简化代码以更好地显示错误。我正在尝试向控制台打印包含数据的向量我是从一个数组中读取的,该数组读取用户的输入。之后我尝试了cout,发现最新的代码看起来非常错误。你确定在这里使用迭代器驱动的方法不是更好,除非显式需要索引,但至少这方面考虑了
size()
@tadman我使用了您给我的下面的代码,它完美地解决了我的内存错误问题,即使在正确打印后仍然存在…我仍然想知道为什么/如何修复该部分。for(auto&&item:invVec){您是否访问了越界的向量,并因此产生了错误。该代码不能越界,它只会对存在的内容进行迭代。当您假设向量具有一定的大小时,这通常是错误的。即使最初是正确的,也可能随着时间的推移而改变,导致难以跟踪错误。Y您希望编写能够处理更改的代码,因此:迭代器。@tadman您真是太棒了!Gratzi!!我们上周刚刚学习了向量和数组,我相信这在将来会派上用场。最好在这里使用迭代器驱动的方法,除非显式需要索引,但至少这尊重
size()
@tadman我使用了您给我的下面的代码,它完美地解决了我的内存错误问题,即使在正确打印后仍然存在…我仍然想知道为什么/如何修复该部分。for(auto&&item:invVec){您是否访问了越界的向量,并因此产生了错误。该代码不能越界,它只会对存在的内容进行迭代。当您假设向量具有一定的大小时,这通常是错误的。即使最初是正确的,也可能随着时间的推移而改变,导致难以跟踪错误。Y你想写能处理变化的代码,因此:迭代器。@tadman你真是太棒了!Gratzi!!我们上周刚刚学习了向量和数组,我相信这在将来会派上用场。我刚刚用你给我的代码修复了它。非常感谢你!你是welcom