作者:最爱7色的彩虹 | 来源:互联网 | 2023-09-08 12:40
最近在学习C++和算法,希望各位大神指教。错误如下:WindowshastriggeredabreakpointinSortAlg.exe.Thismaybedue
最近在学习C++和算法,希望各位大神指教。
错误如下:
Windows has triggered a breakpoint in SortAlg.exe.
This may be due to a corruption of the heap, which indicates a bug in SortAlg.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while SortAlg.exe has focus.
The output window may have more diagnostic information.
似乎是因为内存分配引起的。如果我简单的使用
int tmp[8]={0} 就没有问题。
int *tmp=new int(8);
mergesort1(a,tmp,0,length-1);
delete [] tmp;
完整代码如下:
#include
using namespace std;
int x[8]={0,-1,1,18,5,3,9,9};
template
void PrintfNum(T a[], int n);
//Merge Sorting
template
void merge(T a[],T tmp[],int low,int middle,int high)
{
int x=0;
for(x=low;x<=high;x++) tmp[x]=a[x]; //copy to a tmp array
int PtLeft=low; //[low -- middle]
int PtRight=middle+1; //[middle+1 -- high]
int Current=low;
while( PtLeft<=middle && PtRight<=high )
{ if(tmp[PtLeft]<=tmp[PtRight])
{a[Current]=tmp[PtLeft];
PtLeft++;
}
else{
a[Current]=tmp[PtRight];
PtRight++;
}
Current++;
}
int remaining=middle-PtLeft;
int ccc=0;
for(int i=0;i<=remaining;i++){
a[Current+i]=tmp[PtLeft+i];
}
}
template
void mergesort1(T a[],T tmp[],int low,int high){
if(low
int middle=(low+high)/2;
//cout<<"enter-Merge1-Left:"<
mergesort1(a,tmp,low,middle);
//cout<<"enter-Merge1-Right:"<
mergesort1(a,tmp,middle+1,high);
merge(a,tmp,low,middle,high);
}
}
template
void mergesort(T a[],int length){
int *tmp=new int(8);
mergesort1(a,tmp,0,length-1);
delete [] tmp;
}
int main(){
mergesort(x,8);
PrintfNum(x,8);
system("pause");
return 0;
}
template
void PrintfNum(T a[], int n){
for(int i = 0; i < n; i++){
cout << a[i] << ",";
}
cout << endl;
}
5 个解决方案
施主,是 int *tmp = new int[8];
new int(8) 只是分配一个int长度的内存,初始化这个int值为8
关于自己是否适合编程的很简单的测试:
在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案:
A里面有10处以上文字或标点错误
B里面没有文字或标点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感
A不适合编程(理由:打字准确度偏低、粗心大意)
B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念)
C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证)
D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!)
如果想从A变成B的话,到我的资源
http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”