使用malloc、memory prob合并double的动态数组排序

使用malloc、memory prob合并double的动态数组排序,c,arrays,memory-management,dynamic,mergesort,C,Arrays,Memory Management,Dynamic,Mergesort,大家好,我的MergeSort算法并不完美,它实际上是在一个类似问题中发布的同一个算法,但这甚至不是真正的问题。 基本上,用户输入一个数组大小,以及一系列值的上下限,这些值被放入一个要合并排序的双精度数组中 我可以很好地打印出数组,但在MergeSort之后,它会返回我认为是地址的负值 我知道这与内存有关,但我不知道为什么会出错,因为我相信我分配了内存并正确地清除了它。这是我的代码,特别是在今晚12:00之前,我们将非常感谢您的任何见解;) 这里是main.c、mergesort.c和merge

大家好,我的MergeSort算法并不完美,它实际上是在一个类似问题中发布的同一个算法,但这甚至不是真正的问题。 基本上,用户输入一个数组大小,以及一系列值的上下限,这些值被放入一个要合并排序的双精度数组中

我可以很好地打印出数组,但在MergeSort之后,它会返回我认为是地址的负值

我知道这与内存有关,但我不知道为什么会出错,因为我相信我分配了内存并正确地清除了它。这是我的代码,特别是在今晚12:00之前,我们将非常感谢您的任何见解;)

这里是main.c、mergesort.c和mergesort.h。我也在使用makefile,但我认为没有必要共享它

主要条款c:

#include <stdlib.h>
#include <stdio.h>
#include "mergesort.h"

int lower = 0;
int upper = 0;
int n = 0;

int main(int argc,char* argv[]) {

    int i = 0; // loop values
    int j = 0;
    int r = 0; // random number

    /*int n = 0; // size of array
    int lower = 0; // lower bound on values in array
    int upper = 0; // upper ...*/

    double *t; //array of doubles

    printf("Size of array?\n");
    scanf("%d", &n);

    printf("Lower Bound?\n");
    scanf("%d", &lower);
    //globLower = lower;

    printf("Upper Bound?\n");
    scanf("%d", &upper);
    //globUpper = upper;

    t = malloc(n * sizeof *t); // allocates n slots of memory


    printf("Unsorted Array:\n");

    for(i=0; i<n; i++) {
        r = lower + arc4random() % (upper - lower);

        //printf("%d\n", r);
        t[i] = r;   // fills array with random values in range
        printf("%g\n", t[i]);
    }


    printf("Before Merge Sort\n");

    mergeSort(t,n); // This is supposed to sort the array...

    printf("After Merge Sort\n");

    i = 0; //reset
        // printf("%g\n", t[0]);
        printf("%g\n", t[1]);
        printf("%g\n", t[2]);



    free(t);   // Need to free the memory allocated since is stored in the heap
    return 0; 
 }    

谢谢

这里可能有两个bug:

for(j = 0; j < sizeRight; j++) {
    right[i] = t[beg+j];
(j=0;j{ 右[i]=t[beg+j]; 这可能是:

for(j = 0; j < sizeRight; j++) {
    right[j] = t[med+j];
         ^^^     ^^^
(j=0;j{ 右[j]=t[med+j]; ^^^ ^^^
Compile with-Wall-Wextra,修复警告,将函数声明放在header中等。arc4random在bsd/stdlib.hOk中,因此在修复Paul R指出的小错误后,我仍然存在同样的问题,即值是疯狂的负数,可能在mergesort
之后会从数组中打印出一个实数(k=beg;k OK-你应该掌握你的调试器,并尝试单步执行代码-这将帮助你发现上述问题以及代码中的任何其他错误。嘿,谢谢,这确实有点帮助。我开始找回一些真实值,但不是全部。至于我的调试器,我正在windows上使用cygwin,我不确定它是否正确。)作为一个特征。
for(j = 0; j < sizeRight; j++) {
    right[i] = t[beg+j];
for(j = 0; j < sizeRight; j++) {
    right[j] = t[med+j];
         ^^^     ^^^