初始化程序正在覆盖第二个数组
Initializer is overwriting second array
我无法解决这个问题,我几乎接受了这样一个事实,即目前我的机器可能存在内存问题。
我有一个初始化器:
Search::Search(ifstream& inFile)
{
int id = 0;
int i = 0;
inFile >> id;
while (inFile) {
if(i < SEARCH_DATA_SIZE) {
SearchDataFirst[i] = id;
SearchDataFirstSorted[i] = id;
} else if(i >= SEARCH_DATA_SIZE) {
SearchDataLast[i] = id;
SearchDataLastSorted[i] = id;
}
i++;
inFile >> id;
}
}
在我的标题中,我有这样的私人数据:
const int SEARCH_DATA_SIZE=20;
int SearchDataFirst[SEARCH_DATA_SIZE]; int SearchDataLast[SEARCH_DATA_SIZE]; int SearchDataFirstSorted[SEARCH_DATA_SIZE]; int SearchDataLastSorted[SEARCH_DATA_SIZE];
初始化器从inFile中获取前20个int,存储它们,然后转到下一个记录,并将它们存储在单独的数组中
当我打印数组时,SearchDataFirstSorted具有SearchDataLast的值,尽管这是不可能发生的。SearchDataLastSorted有一些奇怪而古怪的数字。
SearchedDataFirst很好。
我从未对编程语言感到如此沮丧。
希望你能帮忙。
没有其他事情发生,只有初始化器在这一点上被调用。
问题是,如果i >= SEARCH_DATA_SIZE
,那么SearchDataLast[i]
指向SearchDataLast
之外!你真正需要的是这样的东西:
for(int i = 0; i < SEARCH_DATA_SIZE; ++i)
{
inFile >> id;
SearchDataFirst[i] = id;
SearchDataFirstSorted[i] = id;
}
for(int i = 0; i < SEARCH_DATA_SIZE; ++i)
{
inFile >> id;
SearchDataLast[i] = id;
SearchDataLastSorted[i] = id;
}
也就是说,在填充完SearchDataFirst
之后,在开始填充SearchDataLast
之前,需要将i
重置回零。
您的逻辑没有任何意义。据我所知,你正试图做这样的事情:
} else if(i >= SEARCH_DATA_SIZE) {
SearchDataLast[i - SEARCH_DATA_SIZE] = id;
SearchDataLastSorted[i - SEARCH_DATA_SIZE] = id;
}
在其当前形式中,您试图在SearchDataLast
和SearchDataLastSorted
中写入的每个元素都超出了数组边界(这确实会导致内存损坏(。
您的问题在这里:
else if(i >= SEARCH_DATA_SIZE) {
SearchDataLast[i] = id;
SearchDataLastSorted[i] = id;
}
您将超过SearchDataLast
和SearchDataLastSorted
的边界,因为它们的大小为SEARCH_DATA_SIZE
,并且i
大于或等于该量。您可能想要的是i - SEARCH_DATA_SIZE
作为索引。
因此,您会导致未定义的行为,在这种情况下,编译器会按顺序为每个数组分配内存。因此,您基本上跳过了SearchDataLast
中的SEARCH_DATA_SIZE
元素,并将所需的值存储在SearchDataFirstSorted
中。
您不能确保不会溢出SearchDataLast
和SearchDataLastSorted
数组。
当i
超过SEARCH_DATA_SIZE
时,切换阵列。。。但是继续从大于CCD_ 22数组的CCD_。
大概,你打算写这样的东西:
else if (i >= SEARCH_DATA_SIZE)
{
SearchDataLast[i-SEARCH_DATA_SIZE] = id;
SearchDataLastSorted[i-SEARCH_DATA_SIZE] = id;
}
您仍然需要确保不会溢出这些数组的末尾(通过确保i
不是2 * SEARCH_DATA_SIZE
或更大(。
- 需要使用模板查找数组的第二个最小和最小值
- 为什么断点显示数组的第二个值是一个大数字?额外学分工作
- 一个 2D 数组,并按行存储值.第一个循环用于行索引,第二个循环用于列索引
- 我正在尝试将我的 c++ 数组从第二个索引切到最后一个索引
- 第二个和第二个最终值在 C++ 中混合在二维数组中
- C++使用第二个函数获取字符数组的长度
- 是否有可能通过溢出 C 中的第一个元素来写入数组第二个元素
- 最多获得没有第二个变量的数组
- 代码未C++打印第二个字符数组
- 从数组中获取第二个字符串
- 为什么数组与 std::extent 第二个 imp 匹配
- 如何将 char 类型数组传递给函数并将第一个字符数组复制到第二个图表数组并使用 c++ 进行比较
- 打印由用户定义的数组,第一个数字确定单词的大小,第二个数字确定行的大小
- C++ 2D 数组起作用 - 为什么第二个索引不能是可变的
- 如何按第一个,然后是第二个,然后是第三个对 2d 数组进行排序,..使用 C++ 的列
- C++通过引用将 3D 数组传递给第二个对象,无法操作
- 数组的第二个整数
- 您好,我想将一个字符复制到 2D 数组,但第二个字符会擦除第一个字符
- 当 cin.getline() 的第二个参数大于数组长度时,不可预测的字符串长度
- C++:在数组中查找第二个最大元素