gpt4 book ai didi

c++ - 在 heapsort 程序中出现 sigabrt 错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:39:18 24 4
gpt4 key购买 nike

对于给定的堆排序程序,我收到如下所示的 sigabrt 错误。我是编程新手,所以对于愚蠢的错误我深表歉意。

error : Abort signal from abort(3) (SIGABRT)

主要部分代码如下

  • heapify - 一个从给定数组中生成堆的程序

  • heapsort - 根据堆对数组进行排序并将结果保存在数组中的函数

  • main - 驱动函数


#include <iostream>
#include <math.h>
using namespace std;

void swapper (int first, int second) {

int temp;
temp = second;
second = first;
first = temp;
}

void heapify (int a[], int size) {

for(int i = 0; i < (size/2) ; i++) {

int left = 2*i;
int right = 2*i + 1;
if (a[i] < a[left]) {
swap(a[i], a[left]);
}
else if (a[i] < a[right]) {
swap(a[i],a[right]);
}
}
}

void heapsort(int a[], int size){

int treesize = size;
int i = size;
heapify(a,size);
while (treesize > 0) {
cout << " \t " << a[i];
swap(a[i],a[0]);
i --;
treesize--;
heapify(a, treesize);
}

cout <<"\n";

for(int i = 0; i < size; i++) {
cout <<"\t"<<a[i];
}
}

int main() {

// your code goes here
int a[] = {10,1,2,11,4,57,12,13,44,14,6,7,9,8,15,16,17,98};
int arrsize= sizeof(a)/(sizeof(a[0]));
int pos;
int ele = 7;
heapsort(a,arrsize);
for (int i = 0; i < arrsize; i++){
cout <<"\n "<<a[i];
cout<<"\n"<<arrsize;
}
return 0;
}

最佳答案

我不确定程序其余部分的正确性,但你得到异常的原因是你正在越界访问内存。您使用这样的数组大小调用 heapsort:

heapsort(a, arrsize);

然后将 treesizei 设置为该大小:

int treesize = size;
int i = size;

然后在这些行中:

cout << " \t " << a[i];
swap(a[i], a[0]);

i 仍然等于 arraysize。但最多可以是arraysize-1。当您打印 a[i] 时,这会导致未定义的行为,更糟糕的是,下一行中的未定义行为会修改数组外的值。在我的机器上,前者打印垃圾值,后者导致堆栈损坏。相反,您应该像这样设置这些值:

int treesize = size-1;
int i = size-1;

这修复了打印和异常。

关于c++ - 在 heapsort 程序中出现 sigabrt 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55003433/

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