Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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/9/visual-studio/7.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++ ProjectName.exe已触发断点_C++_Visual Studio_Debugging_Compiler Errors - Fatal编程技术网

C++ ProjectName.exe已触发断点

C++ ProjectName.exe已触发断点,c++,visual-studio,debugging,compiler-errors,C++,Visual Studio,Debugging,Compiler Errors,运行程序时,它会正确运行,但总是抛出此错误。它说错误来自以下行: int* temp = new int[length]; 我不知道为什么会这样。程序以升序顺序返回数组,但随后抛出断点 void mergeSort(int *a, int low, int high) { if (low == high) return; int q = (low + high) / 2; mergeSort(a, low, q); mergeSort(a, q

运行程序时,它会正确运行,但总是抛出此错误。它说错误来自以下行:

int* temp = new int[length];
我不知道为什么会这样。程序以升序顺序返回数组,但随后抛出断点

void mergeSort(int *a, int low, int high)
{
    if (low == high)
        return;
    int q = (low + high) / 2;
    mergeSort(a, low, q);
    mergeSort(a, q + 1, high);
    merge(a, low, q, high);
}

void merge(int *a, int low, int q, int high)
{
    const int length = high - low + 1;
    int* temp = new int[length];
    int i = low;
    int k = low;
    int j = q + 1;

    while (i <= q && j <= high)
    {
        if (a[i] <= a[j])
            temp[k++] = a[i++];
        else
            temp[k++] = a[j++];
    }
    while (i <= q)
        temp[k++] = a[i++];
    while (j <= high)
        temp[k++] = a[j++];
    for (i = low; i <= high; i++)
        a[i] = temp[i];
}
void合并排序(int*a、int低、int高)
{
如果(低==高)
返回;
int q=(低+高)/2;
合并排序(a、低、q);
合并排序(a、q+1、高);
合并(a、低、q、高);
}
无效合并(int*a、int-low、int-q、int-high)
{
常量int长度=高-低+1;
int*temp=新int[长度];
int i=低;
int k=低;
int j=q+1;

而(i我认为这是
temp

    int k = low;
void merge
k
中,变量为
temp
数组索引。如果
mergeSort(a,q+1,high)
调用,则
merge low
参数为
q+1
k
超出范围0~长度

如果
k
超出范围0~length.
temp[k]
发生访问冲突。
我还建议在
merge
功能中添加
delete[]temp

这是我的密码

int _a[] = { 5, 1, 3, 4, 2 }; // Test array!

void merge(int *a, int low, int q, int high)
{
    const int length = high - low + 1;
    int* temp = new int[length];
    int i = low;
    int k = 0;   // I fixed it(low -> 0)
    int j = q + 1;

    while (i <= q && j <= high)
    {
        if (a[i] <= a[j])
            temp[k++] = a[i++];
        else
            temp[k++] = a[j++];
    }
    while (i <= q)
        temp[k++] = a[i++];
    while (j <= high)
        temp[k++] = a[j++];
    for (i = low; i <= high; i++)
        a[i] = temp[i];

    delete[] temp; // Add Delete
}

int main()
{
    mergeSort(_a, 0, 5);
    return 0;
}
int_a[]={5,1,3,4,2};//测试数组!
无效合并(int*a、int-low、int-q、int-high)
{
常量int长度=高-低+1;
int*temp=新int[长度];
int i=低;
int k=0;//我修复了它(低->0)
int j=q+1;

while(i您的
主函数在哪里?请包含一个。在某些情况下,长度可能为负值?请使用调试器或提供MRE;)不相关,但您从不释放temp,这会导致内存泄漏。当它到达断点时,请进入调试器并检查
长度的值。如果我们预期它非常大或为负值,请检查用于计算它的值。调试是一项基本的编程任务,您需要熟练掌握。