Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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/3/arrays/13.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++;:使用数组实现MergeSort时出错:malloc():内存损坏(fast):用于 我正在研究C++中的合并排序的实现,当运行我的合并函数时,我得到以下错误: *** glibc detected *** ./p1: malloc(): memory corruption (fast): 0x0000000001a250d0 *** ======= Backtrace: ========= /lib64/libc.so.6[0x386ce75e5e] /lib64/libc.so.6[0x386ce7a528] /lib64/libc.so.6(__libc_malloc+0x5c)[0x386ce7ab1c] /usr/lib64/libstdc++.so.6(_Znwm+0x1d)[0x343febd0cd] /usr/lib64/libstdc++.so.6(_ZNSs4_Rep9_S_createEmmRKSaIcE+0x59)[0x343fe9c3c9] /usr/lib64/libstdc++.so.6(_ZNSs4_Rep8_M_cloneERKSaIcEm+0x2b)[0x343fe9d19b] /usr/lib64/libstdc++.so.6(_ZNSs7reserveEm+0x3c)[0x343fe9d5ec] /usr/lib64/libstdc++.so.6(_ZNSs6appendERKSs+0x4f)[0x343fe9dabf] ./p1[0x403b35] ./p1[0x401ef9] /lib64/libc.so.6(__libc_start_main+0x100)[0x386ce1ed20] ./p1[0x401879] ======= Memory map: ======== 00400000-00406000 r-xp 00000000 fd:00 12322163 /home/hmp54/p1b/p1 00605000-00606000 rw-p 00005000 fd:00 12322163 /home/hmp54/p1b/p1 01a25000-01a46000 rw-p 00000000 00:00 0 [heap] 343fe00000-343fee8000 r-xp 00000000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 343fee8000-34400e8000 ---p 000e8000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 34400e8000-34400ef000 r--p 000e8000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 34400ef000-34400f1000 rw-p 000ef000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 34400f1000-3440106000 rw-p 00000000 00:00 0 386ca00000-386ca20000 r-xp 00000000 fd:00 6815797 /lib64/ld-2.12.so 386cc20000-386cc21000 r--p 00020000 fd:00 6815797 /lib64/ld-2.12.so 386cc21000-386cc22000 rw-p 00021000 fd:00 6815797 /lib64/ld-2.12.so 386cc22000-386cc23000 rw-p 00000000 00:00 0 386ce00000-386cf8b000 r-xp 00000000 fd:00 6815808 /lib64/libc-2.12.so 386cf8b000-386d18a000 ---p 0018b000 fd:00 6815808 /lib64/libc-2.12.so 386d18a000-386d18e000 r--p 0018a000 fd:00 6815808 /lib64/libc-2.12.so 386d18e000-386d190000 rw-p 0018e000 fd:00 6815808 /lib64/libc-2.12.so 386d190000-386d194000 rw-p 00000000 00:00 0 386d200000-386d283000 r-xp 00000000 fd:00 6816160 /lib64/libm-2.12.so 386d283000-386d482000 ---p 00083000 fd:00 6816160 /lib64/libm-2.12.so 386d482000-386d483000 r--p 00082000 fd:00 6816160 /lib64/libm-2.12.so 386d483000-386d484000 rw-p 00083000 fd:00 6816160 /lib64/libm-2.12.so 3995800000-3995816000 r-xp 00000000 fd:00 6815780 /lib64/libgcc_s-4.4.7-20120601.so.1 3995816000-3995a15000 ---p 00016000 fd:00 6815780 /lib64/libgcc_s-4.4.7-20120601.so.1 3995a15000-3995a16000 rw-p 00015000 fd:00 6815780 /lib64/libgcc_s-4.4.7-20120601.so.1 7f4654000000-7f4654021000 rw-p 00000000 00:00 0 7f4654021000-7f4658000000 ---p 00000000 00:00 0 7f465a4d0000-7f465a4d5000 rw-p 00000000 00:00 0 7f465a4e2000-7f465a4e5000 rw-p 00000000 00:00 0 7ffeca062000-7ffeca077000 rw-p 00000000 00:00 0 [stack] 7ffeca13c000-7ffeca13d000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] (OrderedList) After mergeSort: Aborted (core dumped)_C++_Arrays_Sorting_Data Structures_Mergesort - Fatal编程技术网

C++;:使用数组实现MergeSort时出错:malloc():内存损坏(fast):用于 我正在研究C++中的合并排序的实现,当运行我的合并函数时,我得到以下错误: *** glibc detected *** ./p1: malloc(): memory corruption (fast): 0x0000000001a250d0 *** ======= Backtrace: ========= /lib64/libc.so.6[0x386ce75e5e] /lib64/libc.so.6[0x386ce7a528] /lib64/libc.so.6(__libc_malloc+0x5c)[0x386ce7ab1c] /usr/lib64/libstdc++.so.6(_Znwm+0x1d)[0x343febd0cd] /usr/lib64/libstdc++.so.6(_ZNSs4_Rep9_S_createEmmRKSaIcE+0x59)[0x343fe9c3c9] /usr/lib64/libstdc++.so.6(_ZNSs4_Rep8_M_cloneERKSaIcEm+0x2b)[0x343fe9d19b] /usr/lib64/libstdc++.so.6(_ZNSs7reserveEm+0x3c)[0x343fe9d5ec] /usr/lib64/libstdc++.so.6(_ZNSs6appendERKSs+0x4f)[0x343fe9dabf] ./p1[0x403b35] ./p1[0x401ef9] /lib64/libc.so.6(__libc_start_main+0x100)[0x386ce1ed20] ./p1[0x401879] ======= Memory map: ======== 00400000-00406000 r-xp 00000000 fd:00 12322163 /home/hmp54/p1b/p1 00605000-00606000 rw-p 00005000 fd:00 12322163 /home/hmp54/p1b/p1 01a25000-01a46000 rw-p 00000000 00:00 0 [heap] 343fe00000-343fee8000 r-xp 00000000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 343fee8000-34400e8000 ---p 000e8000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 34400e8000-34400ef000 r--p 000e8000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 34400ef000-34400f1000 rw-p 000ef000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 34400f1000-3440106000 rw-p 00000000 00:00 0 386ca00000-386ca20000 r-xp 00000000 fd:00 6815797 /lib64/ld-2.12.so 386cc20000-386cc21000 r--p 00020000 fd:00 6815797 /lib64/ld-2.12.so 386cc21000-386cc22000 rw-p 00021000 fd:00 6815797 /lib64/ld-2.12.so 386cc22000-386cc23000 rw-p 00000000 00:00 0 386ce00000-386cf8b000 r-xp 00000000 fd:00 6815808 /lib64/libc-2.12.so 386cf8b000-386d18a000 ---p 0018b000 fd:00 6815808 /lib64/libc-2.12.so 386d18a000-386d18e000 r--p 0018a000 fd:00 6815808 /lib64/libc-2.12.so 386d18e000-386d190000 rw-p 0018e000 fd:00 6815808 /lib64/libc-2.12.so 386d190000-386d194000 rw-p 00000000 00:00 0 386d200000-386d283000 r-xp 00000000 fd:00 6816160 /lib64/libm-2.12.so 386d283000-386d482000 ---p 00083000 fd:00 6816160 /lib64/libm-2.12.so 386d482000-386d483000 r--p 00082000 fd:00 6816160 /lib64/libm-2.12.so 386d483000-386d484000 rw-p 00083000 fd:00 6816160 /lib64/libm-2.12.so 3995800000-3995816000 r-xp 00000000 fd:00 6815780 /lib64/libgcc_s-4.4.7-20120601.so.1 3995816000-3995a15000 ---p 00016000 fd:00 6815780 /lib64/libgcc_s-4.4.7-20120601.so.1 3995a15000-3995a16000 rw-p 00015000 fd:00 6815780 /lib64/libgcc_s-4.4.7-20120601.so.1 7f4654000000-7f4654021000 rw-p 00000000 00:00 0 7f4654021000-7f4658000000 ---p 00000000 00:00 0 7f465a4d0000-7f465a4d5000 rw-p 00000000 00:00 0 7f465a4e2000-7f465a4e5000 rw-p 00000000 00:00 0 7ffeca062000-7ffeca077000 rw-p 00000000 00:00 0 [stack] 7ffeca13c000-7ffeca13d000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] (OrderedList) After mergeSort: Aborted (core dumped)

C++;:使用数组实现MergeSort时出错:malloc():内存损坏(fast):用于 我正在研究C++中的合并排序的实现,当运行我的合并函数时,我得到以下错误: *** glibc detected *** ./p1: malloc(): memory corruption (fast): 0x0000000001a250d0 *** ======= Backtrace: ========= /lib64/libc.so.6[0x386ce75e5e] /lib64/libc.so.6[0x386ce7a528] /lib64/libc.so.6(__libc_malloc+0x5c)[0x386ce7ab1c] /usr/lib64/libstdc++.so.6(_Znwm+0x1d)[0x343febd0cd] /usr/lib64/libstdc++.so.6(_ZNSs4_Rep9_S_createEmmRKSaIcE+0x59)[0x343fe9c3c9] /usr/lib64/libstdc++.so.6(_ZNSs4_Rep8_M_cloneERKSaIcEm+0x2b)[0x343fe9d19b] /usr/lib64/libstdc++.so.6(_ZNSs7reserveEm+0x3c)[0x343fe9d5ec] /usr/lib64/libstdc++.so.6(_ZNSs6appendERKSs+0x4f)[0x343fe9dabf] ./p1[0x403b35] ./p1[0x401ef9] /lib64/libc.so.6(__libc_start_main+0x100)[0x386ce1ed20] ./p1[0x401879] ======= Memory map: ======== 00400000-00406000 r-xp 00000000 fd:00 12322163 /home/hmp54/p1b/p1 00605000-00606000 rw-p 00005000 fd:00 12322163 /home/hmp54/p1b/p1 01a25000-01a46000 rw-p 00000000 00:00 0 [heap] 343fe00000-343fee8000 r-xp 00000000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 343fee8000-34400e8000 ---p 000e8000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 34400e8000-34400ef000 r--p 000e8000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 34400ef000-34400f1000 rw-p 000ef000 fd:00 1062181 /usr/lib64/libstdc++.so.6.0.13 34400f1000-3440106000 rw-p 00000000 00:00 0 386ca00000-386ca20000 r-xp 00000000 fd:00 6815797 /lib64/ld-2.12.so 386cc20000-386cc21000 r--p 00020000 fd:00 6815797 /lib64/ld-2.12.so 386cc21000-386cc22000 rw-p 00021000 fd:00 6815797 /lib64/ld-2.12.so 386cc22000-386cc23000 rw-p 00000000 00:00 0 386ce00000-386cf8b000 r-xp 00000000 fd:00 6815808 /lib64/libc-2.12.so 386cf8b000-386d18a000 ---p 0018b000 fd:00 6815808 /lib64/libc-2.12.so 386d18a000-386d18e000 r--p 0018a000 fd:00 6815808 /lib64/libc-2.12.so 386d18e000-386d190000 rw-p 0018e000 fd:00 6815808 /lib64/libc-2.12.so 386d190000-386d194000 rw-p 00000000 00:00 0 386d200000-386d283000 r-xp 00000000 fd:00 6816160 /lib64/libm-2.12.so 386d283000-386d482000 ---p 00083000 fd:00 6816160 /lib64/libm-2.12.so 386d482000-386d483000 r--p 00082000 fd:00 6816160 /lib64/libm-2.12.so 386d483000-386d484000 rw-p 00083000 fd:00 6816160 /lib64/libm-2.12.so 3995800000-3995816000 r-xp 00000000 fd:00 6815780 /lib64/libgcc_s-4.4.7-20120601.so.1 3995816000-3995a15000 ---p 00016000 fd:00 6815780 /lib64/libgcc_s-4.4.7-20120601.so.1 3995a15000-3995a16000 rw-p 00015000 fd:00 6815780 /lib64/libgcc_s-4.4.7-20120601.so.1 7f4654000000-7f4654021000 rw-p 00000000 00:00 0 7f4654021000-7f4658000000 ---p 00000000 00:00 0 7f465a4d0000-7f465a4d5000 rw-p 00000000 00:00 0 7f465a4e2000-7f465a4e5000 rw-p 00000000 00:00 0 7ffeca062000-7ffeca077000 rw-p 00000000 00:00 0 [stack] 7ffeca13c000-7ffeca13d000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] (OrderedList) After mergeSort: Aborted (core dumped),c++,arrays,sorting,data-structures,mergesort,C++,Arrays,Sorting,Data Structures,Mergesort,我已经声明了OrderedList对象中的函数,下面代码块中的myArray就是我要排序的: (myArray是一个int*) “合并排序()”: void OrderedList::mergeSort(int first,int last){ 中间; 如果(第一次 >,这是标准C++的一部分,但是允许不用。例如可变长度数组。 void OrderedList::mergeSort(int first, int last){ int middle; if(first <

我已经声明了
OrderedList对象中的函数
,下面代码块中的
myArray
就是我要排序的: (
myArray
是一个
int*

“合并排序()”:

void OrderedList::mergeSort(int first,int last){
中间;
如果(第一次<最后一次){
中间整数=((第一个+最后一个)/2);
合并排序(第一,中间);
合并排序(中间+1,最后);
合并(第一、中间、最后);
}
}
下面是我的“Merge()”函数:


void OrderedList::merge(int first, int middle, int last){
    int tempArray[last];  
    int i = first, j = middle + 1; 
    int index = first; 

    while((i <= middle) && (j <=last)){

        if(myArray[i] < myArray[j]){
            tempArray[index] = myArray[i]; 
            i++;
        } else { 
            tempArray[index] = myArray[j]; 
            j++; 
        }
        index++; 
        theTraversalCount++; 
    }


    if(i > middle){
        while(j <= last){
            tempArray[index] = myArray[j];
            j++;
            index++;  
            theTraversalCount++; 
        }
    } else{
        while(i <= middle){
            tempArray[index] = myArray[i]; 
            i++;
            index++;
            theTraversalCount++; 
        }
    }

    for(int k = first; k < index; k++){
        myArray[k] = tempArray[k];
        theTraversalCount++;  

    }
}


void OrderedList::merge(int-first、int-middle、int-last){
int temparay[last];
int i=第一,j=中间+1;
int指数=第一;

while((我注意到在C++中不支持VSA什么是VSA?@SlavaSorry它的VLA。顺便说一句,这种错误通常是由于超出范围的内存访问或违反三条规则而发生的,但是如果不这样做,就很难说出什么是错误的
int tempArray[last]这是无效的C++。同样,@ HMP54可以先用向量来原型,看看它是否工作。一旦你有了它,你就变成了老师想要你使用的类型。而且,我觉得奇怪的是你不能使用<代码>矢量< /C> >,这是标准C++的一部分,但是允许不用。例如可变长度数组。
void OrderedList::mergeSort(int first, int last){
    int middle; 

    if(first < last){
        int middle = ((first + last) / 2); 
        mergeSort(first, middle); 
        mergeSort(middle + 1, last);
        merge(first, middle, last); 
    }
}


void OrderedList::merge(int first, int middle, int last){
    int tempArray[last];  
    int i = first, j = middle + 1; 
    int index = first; 

    while((i <= middle) && (j <=last)){

        if(myArray[i] < myArray[j]){
            tempArray[index] = myArray[i]; 
            i++;
        } else { 
            tempArray[index] = myArray[j]; 
            j++; 
        }
        index++; 
        theTraversalCount++; 
    }


    if(i > middle){
        while(j <= last){
            tempArray[index] = myArray[j];
            j++;
            index++;  
            theTraversalCount++; 
        }
    } else{
        while(i <= middle){
            tempArray[index] = myArray[i]; 
            i++;
            index++;
            theTraversalCount++; 
        }
    }

    for(int k = first; k < index; k++){
        myArray[k] = tempArray[k];
        theTraversalCount++;  

    }
}