C++ 为什么我的数组说写访问冲突部分通过?
更新为复制/粘贴并运行。我的错 我知道我可能会得到整个“这个问题已经被问过了”的答案,但我花了一些时间寻找,却找不到匹配的问题。很可能我只是知道的不够多,找不到合适的地方 当我调用initSorterDarray()时,它会在抛出异常(写访问冲突)之前遍历看似随机数目的元素。每次我运行它时,它都会在不同的元素编号处停止。有什么想法吗C++ 为什么我的数组说写访问冲突部分通过?,c++,arrays,C++,Arrays,更新为复制/粘贴并运行。我的错 我知道我可能会得到整个“这个问题已经被问过了”的答案,但我花了一些时间寻找,却找不到匹配的问题。很可能我只是知道的不够多,找不到合适的地方 当我调用initSorterDarray()时,它会在抛出异常(写访问冲突)之前遍历看似随机数目的元素。每次我运行它时,它都会在不同的元素编号处停止。有什么想法吗 #include <array> #include <iostream> using namespace std; int * toSo
#include <array>
#include <iostream>
using namespace std;
int * toSort;
const int SIZE = 100000;
void InitSortedArray()
{
srand(0);
toSort[0] = rand() % 5;
cout << toSort[0];
for (int i = 1; i < SIZE - 1; i++)
{
srand(0);
toSort[i] = toSort[i - 1] + rand() % 5;
cout << toSort[i] << endl;
}
}
void Search()
{
toSort[SIZE];
InitSortedArray();
}
int main()
{
Search();
}
#包括
#包括
使用名称空间std;
int*toSort;
常数int SIZE=100000;
void init darray()
{
srand(0);
toSort[0]=rand()%5;
cout看起来您正在使用一个指向随机空间的未初始化指针,并试图在其中存储元素和访问元素。此外,您还包括了“array”这里没有任何意义。我相信您在这里要做的是初始化toSort数组,以实际指向您要指向的内存部分:
int toSort[SIZE];
而不是
int * toSort;
如果您希望使用STL数组(这可能是高度推荐的),那么您需要明确使用它:
std::array<int, SIZE> toSort;
std::数组排序;
使用STL的好处在于它可以解决很多内存访问问题,比如内存访问冲突。STL的另一个有用之处是vector:
#include <vector>
std::vector<int> toSort;
#包括
std::矢量排序;
随后:(这会在向量的后面添加一个项)
toSort.push_back();
以及访问:
int somethingElse = toSort[<index number>];
int-somethingElse=toSort[];
阵列:
向量:
将指针分配给尚未分配给它的某些数据。从未分配任何数据。您可以
int * toSort = new int[100000];
但这会占用一些您不需要的内存管理工作。无论何时使用new[]
或早或晚,您都必须delete[]
。请改用
const int SIZE = 100000; // place first so we can use it below
int toSort[SIZE];
还是更现代
const int SIZE = 100000; // place first so we can use it below
std::array<int, SIZE> toSort;
在搜索中
没有任何帮助(事实上,它通过访问toSort
范围之外的内容而调用时是有害的),应该删除它
额外材料:
只有在非常罕见的情况下,您才会多次调用它,在这种情况下,有许多比srand
和rand
更好的选项
只需在main
顶部调用srand
,并确保您需要srand(0)
,因为这将始终在给定的计算机上生成完全相同的数字。这对于测试非常有用,但如果您每次都需要不同的序列,则效果不太好。典型的用法是srand(time(NULL))
根据不断变化的时间流对生成器进行种子设定。这仍然不是很好,但对于大多数使用rand
的情况来说已经足够了。欢迎使用Stack Overflow!请在@NathanOliver的评论后回答您的问题,尝试提供一个完整的示例,s.t。其他人可以运行您的代码。我怀疑您没有正确初始化数组。已将其更新为运行。*此外,COUTs也在那里,以便我更好地跟踪它的消亡位置。代码不需要它们。您将toSort声明为指针,但从不为其内容分配空间。请再次尝试使用new[],尝试使用toSort[SIZE];
不执行任何操作。
const int SIZE = 100000; // place first so we can use it below
int toSort[SIZE];
const int SIZE = 100000; // place first so we can use it below
std::array<int, SIZE> toSort;
toSort[100000];