Cri*_*s B 0 c c++ pointers dereference visual-c++
在开始使用std :: copy或memcpy之类的抽象之前,我首先尝试通过低级细节来学习C++.目前,我一直试图弄清楚为什么这段代码永远不会分配到"sortedArray"变量,当用调试器查找时,我正确地从"数据"取消引用值,但它从未分配给"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;
}
Run Code Online (Sandbox Code Playgroud)
*(sortedArray++) = *(data++);修改指针,使其不再指向已分配内存的开头.所以,稍后sortedArray[i]会发生在数组内存中的任何事情,并且访问它是未定义的行为.
如果你必须使用指针,快速解决方法是使用临时指针,如:
int *sortedArray = (int*)malloc(size*sizeof(int));
int* s = sortedArray;
for (int i = 0; i < size;i++){
*s++ = *data++;
}
Run Code Online (Sandbox Code Playgroud)
另一种方式是:
int *sortedArray = (int*)malloc(size*sizeof(int));
for (int i = 0; i < size;i++){
sortedArray[i] = data[i];
}
Run Code Online (Sandbox Code Playgroud)
但是,最好的方法是使用标准容器和算法,比如vector和sort.
这是第一个修复的演示.
| 归档时间: |
|
| 查看次数: |
1495 次 |
| 最近记录: |