在处理数组时,指针的分段错误。

问题描述 投票:0回答:1

我试图将数组元素与5相乘,但我得到的错误是core dumped,如果没有,那么,它只将5与第一个元素相乘。

下面是代码。

    #include <iostream>
    using namespace std;

    int ptr_multiply(int[],int);
    int main(){

        int size;

        cout<<"Enter the size of an array ==";
        cin>>size;

        int arr[size];


        cout<<"Enter the elements of array ==";

        for (int i=0;i<size;i++){

        cin>>arr[i];
        }

        ptr_multiply(arr,size);

        }

    int ptr_multiply(int a1[],int s1){

        int *ptr;   


        for (int i=0;s1;i++)
        {

            *ptr=a1[i];

            ptr*=5;

            cout<<"The Elements"<<" "<< i <<" "<<" after multiplying 5 is =="<<*ptr;

        }}
c++ arrays pointers
1个回答
2
投票
*ptr=a1[i];
ptr*=5;

第一行。你取消了对一个指针的引用,而这个指针没有指向任何地方(它没有被初始化)。这是错的,会导致未定义的行为。你试图将一个指针赋值给一个 int 当没有 int.

第二行: 你不能取消对指针的引用。你将指针的值乘以 5 当你真正想乘以 int 所指 5 (记住:没有 int 指向)。)

这里不需要指针。

for (int i=0;i < s1;i++) {
    int value = a1[i];
    value *= 5;
    cout<<"The Elements"<<" "<< i <<" "<<" after multiplying 5 is =="<<value;
}

而且条件也是错误的。它应该是 i < s1.

最后但并非最不重要的是,不要在C++中使用C-数组。它们很难使用,而且容易出错。最好是使用 std::array 对于固定大小的数组和 std::vector 为动态大小。实际上 int arr[size]; 不是标准的C++,见 为什么可变长度数组不是C++标准的一部分?

© www.soinside.com 2019 - 2024. All rights reserved.