c++ - 滥用指针会产生段错误。我仍然不确定如何纠正它

标签 c++ pointers segmentation-fault

读完一些书后,我觉得我明白这里出了什么问题,但我不知道如何解决。据我了解,问题在于我如何在第 4 行(强调)中编写数组的输入。问题本身是,当我第一次在任何 IDE 中运行代码时,它运行良好,但是当我尝试处理数字时,它会将新数组视为与第一个数组共享大小,即使在它没有。似乎我应该以某种替代方式重写第 4 行,以免滥用指针,但我不确定如何。

using namespace std;

void INSERTIONSORT(int* A) { //THIS IS LINE 4
    int i;
    int key;
    for (int j = 0; j < sizeof(A); j++) {
        key = A[j];
        i = j - 1;
        while (i >= 0 && A[i] > key) {
            A[i + 1] = A[i];
            i = i - 1;
        }
        A[i + 1] = key;
    }
}

void display(int* A) {
    for (int i = 0; i <= sizeof(A)-1; i++)
        cout << A[i] << " ";
    cout << endl;
}

int main() {
    int myArray[] = { 2,1,4,3 };
    cout << "Array before Sorting: ";
    display(myArray);
    INSERTIONSORT(myArray);
    cout << "Array after Sorting: ";
    display(myArray);
    return 0;
}```

最佳答案

这一行是问题:

for (int j = 0; j < sizeof(A); j++) {

您需要的是数组的大小(元素的数量),您得到的是以字节为单位的指针大小(= 4,对于 32 位系统),通常您希望显式传递数组大小或使用一些一种知道自己大小的容器( std::vector )。

关于c++ - 滥用指针会产生段错误。我仍然不确定如何纠正它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62096529/

相关文章:

C++:在当前实例被销毁后创建类的新实例的问题

c++ - 为什么不对指针强制执行 constness?

c - 如何修复段错误

c++ - Eigen中逆矩阵的计算出错

c++ - 如何将 Boost.Log 重定向到文件

c++ - 指针访问冲突? - C++

c - 从字符串中删除空格,但不在开头或结尾

c - C 循环中递增整数指针

c++ - 双向链表上的快速排序

c++ - Openmp 结果不可靠?