gpt4 book ai didi

c++ - 调用方法时执行停止

转载 作者:行者123 更新时间:2023-11-28 05:38:48 24 4
gpt4 key购买 nike

我是 C/C++ 编程的新手,我通过开发合并排序代码来练习。

但是当我在我的代码中调用 mergeArrays() 函数时,程序停止执行。我正在使用 Eclipse IDE。

情况 1 - 现在,从 sort() 开始,如果我调用 mergeArrays() 程序执行停止。我只能到达调试点 1,eclipse 在到达调试点 2 或 3 之前挂起。

情况 2 - 但是,当不从 sort() 调用 mergeArrays() 时,通过注释掉对 mergeArrays 的调用。程序执行到完成(显然,我确实得到了想要的结果。)在情况 2 中,我可以到达所有 3 个调试点。

我不担心代码的正确性,但更感兴趣的是试图找出为什么在情况 1 中从 sort() 调用 mergeArrays() 会影响对 sort() 本身的调用。

这是代码

主文件

int main(){

int Arr = {3,2,4,1,5,6} ;
int ArraySize = 6
CMergeSort mergesort;
cout << "Debug Point 1" << endl;
mergesort.sort(Arr,ArraySize);

cout << "Debug Point 3 " << end;
// Print the Sorted List
for(int k=0; k < ArraySize ;k++)
{
cout << Arr[k] << endl ;
}

return 0;
}

文件 - MergeSort.h

class CMergeSort{
public:
int* sort(int *mArray,int mArraySize);
int* mergeArrays(int* leftArray,int leftArraySize, int* rightArray,int rightArraySize, int* mArr);

};

文件 - MergeSort.cpp

int* CMergeSort::sort(int* mArray, int mArraySize)
{

if(mArraySize < 2)
{
return mArray ;
}

cout << "Debug Point 2 "<< endl ;

int mid = mArraySize/2 ;
int left_array[mid] = {} ;
int right_array[mArraySize - mid] = {};

for(int i = 0 ; i< mid;i++) // left array size = mArraySize - mid
{
left_array[i] = mArray[i] ;
}

for(int j = 0 ;j< mArraySize - mid;j++) // right arr size= mArraySize - mid
{
right_array[j] = mArray[mid+j] ;
}

sort(left_array,mid);
sort(right_array, mArraySize - mid);
mergeArrays(left_array, mid, right_array, mArraySize - mid, mArray);

return mArray;
}


int* CMergeSort::mergeArrays(int* leftArray,int leftArraySize, int* rightArray,int rightArraySize, int* mArr)
{
int i = 0 ; // left array tracker
int j = 0 ; // right array tracker
int k = 0 ; // main array tracker

for(int s =0 ; s < leftArraySize + rightArraySize; i++)
{
if(leftArray[i] < rightArray[j] || j == leftArraySize + rightArraySize)
{
mArr[i+j] = leftArray[i] ;
i++ ;
k++ ;
}

if (leftArray[i] > rightArray[j] || i == leftArraySize + rightArraySize )
{
mArr[i+j] = rightArray[j];
j++;
k++;
}
}

return mArr ;
}

最佳答案

查看 mergeArrays() 中的 for 循环

for(int s =0 ; s < leftArraySize + rightArraySize; i++)

你定义了一个循环变量,s;您根据 s 测试循环条件 但是 您增加了另一个变量 i

查看完整周期,您会发现您从未修改过 s

所以这个循环应该永远持续下去。

但令我惊讶的是程序没有崩溃,因为它可以写入 mArr[i+j]i 非常高。

p.s.:抱歉我的英语不好

关于c++ - 调用方法时执行停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com