我正在学习C++,在我开始使用抽象类之前,先学习低级别的细节,比如。目前,我一直在试图弄清楚为什么这段代码从来没有分配给“sortedArray”变量,当使用调试器查找时,我从“data”中正确地取消了对该值的引用,但它从来没有分配给“sortedArray”。我看到的值是“-842150451”,而不是第一个值的“14”。你能帮我弄清楚我做错了什么吗?还有任何其他的问题,可能是我没有看到或建议将非常感谢!

void swap(int* bigger, int* smaller){
    *bigger += *smaller;
    *smaller = *bigger - *smaller;
    *bigger = *bigger - *smaller;
}

int* bubbleSort(int *data, int size){
    bool swapped = true;
    int *sortedArray = (int*)malloc(size*sizeof(int));
    for (int i = 0; i < size;i++){
        *(sortedArray++) = *(data++);
    }

    while (swapped){
        swapped = false;
        for (int i = 1; i <= size - 1; i++){
            if (sortedArray[i - 1] > sortedArray[i]){
                swap(&sortedArray[i - 1], &sortedArray[i]);
                swapped = true;
            }
        }
        size--;
    }
    return sortedArray;
}

最佳答案

*(sortedArray++) = *(data++);修改指针,使其不再指向已分配内存的开头。所以,后面的sortedArray[i]是内存中超过数组的任何东西,访问它是未定义的行为。
如果必须使用指针,则可以使用临时指针,例如:

int *sortedArray = (int*)malloc(size*sizeof(int));
int* s = sortedArray;
for (int i = 0; i < size;i++){
    *s++ = *data++;
}

另一种方法是:
int *sortedArray = (int*)malloc(size*sizeof(int));
for (int i = 0; i < size;i++){
    sortedArray[i] = data[i];
}

但是,最好的方法是使用标准容器和算法,比如vectorsort
这是第一个修正的demo

09-09 23:12
查看更多