MergeSort算法报错: This may be due to a corruption of the heap。 谢谢各路大神

dxw 2014-06-18 07:35:37
最近在学习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<T>(a,tmp,0,length-1);
delete [] tmp;


完整代码如下:
#include<iostream>
using namespace std;
int x[8]={0,-1,1,18,5,3,9,9};
template <class T>
void PrintfNum(T a[], int n);
//Merge Sorting
template <class T>
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 <class T>
void mergesort1(T a[],T tmp[],int low,int high){
if(low<high){
int middle=(low+high)/2;
//cout<<"enter-Merge1-Left:"<<low<<','<<middle<<','<<high<<endl;
mergesort1<T>(a,tmp,low,middle);
//cout<<"enter-Merge1-Right:"<<low<<','<<middle<<','<<high<<endl;
mergesort1<T>(a,tmp,middle+1,high);
merge<T>(a,tmp,low,middle,high);
}
}

template <class T>
void mergesort(T a[],int length){
int *tmp=new int(8);
mergesort1<T>(a,tmp,0,length-1);

delete [] tmp;
}

int main(){

mergesort<int>(x,8);

PrintfNum<int>(x,8);

system("pause");
return 0;

}

template <class T>
void PrintfNum(T a[], int n){
for(int i = 0; i < n; i++){
cout << a[i] << ",";
}
cout << endl;
}
...全文
249 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxw 2014-06-23
  • 打赏
  • 举报
回复
发现了。。。原来是个低级错误。。。 好久没有编程了。。EE专业。。要毕业了。以后估计要做码农。。。恶补ing.. 谢谢大家!!
buyong 2014-06-19
  • 打赏
  • 举报
回复
nt *tmp=new int[8]; 要认真呀
赵4老师 2014-06-19
  • 打赏
  • 举报
回复
关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感 A不适合编程(理由:打字准确度偏低、粗心大意) B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念) C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证) D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!) 如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
碼上道 2014-06-18
  • 打赏
  • 举报
回复
new int(8) 只是分配一个int长度的内存,初始化这个int值为8
羽飞 2014-06-18
  • 打赏
  • 举报
回复
施主,是 int *tmp = new int[8];

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧