Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的数组说写访问冲突部分通过?_C++_Arrays - Fatal编程技术网

C++ 为什么我的数组说写访问冲突部分通过?

C++ 为什么我的数组说写访问冲突部分通过?,c++,arrays,C++,Arrays,更新为复制/粘贴并运行。我的错 我知道我可能会得到整个“这个问题已经被问过了”的答案,但我花了一些时间寻找,却找不到匹配的问题。很可能我只是知道的不够多,找不到合适的地方 当我调用initSorterDarray()时,它会在抛出异常(写访问冲突)之前遍历看似随机数目的元素。每次我运行它时,它都会在不同的元素编号处停止。有什么想法吗 #include <array> #include <iostream> using namespace std; int * toSo

更新为复制/粘贴并运行。我的错

我知道我可能会得到整个“这个问题已经被问过了”的答案,但我花了一些时间寻找,却找不到匹配的问题。很可能我只是知道的不够多,找不到合适的地方

当我调用initSorterDarray()时,它会在抛出异常(写访问冲突)之前遍历看似随机数目的元素。每次我运行它时,它都会在不同的元素编号处停止。有什么想法吗

#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];