我正在学习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];
}
但是,最好的方法是使用标准容器和算法,比如
vector
和sort
。这是第一个修正的demo。