-1
  • gdb 已经尝试过:0
void Reverse(struct Array *arr)
{
    int i, j;
    for (i = 0, j = arr->length - 1; i < j; i++, j--)
    {
        swap(&arr->arr[i], &arr->arr[j]);
    }
}

void Reverse2(struct Array *obj)
{
    int *b;
    int i, j;
    b = new int;
    for (i = obj->length - 1, j = 0; i >= 0; i--, j++)
        b[j] = obj->arr[i];
    for (i = 0; i < obj->length; i++)
        obj->arr[i] = b[i];
}

void Display(struct Array obj1)
{
    int i;
    cout << "yOur elements are: ";
    for (i = 0; i < obj1.length; i++)
        cout << obj1.arr[i] << " ";
}

int main()
{
    struct Array obj = {{9, 8, 7, 6, 5, 3}, 10, 6};
    cout << "your array is: ";
    Display(obj);

    cout << "\nAfter reversing using swap ";
    Reverse(&obj);
    Display(obj);

    cout << "\nAfter reversing: ";
    Reverse2(obj);
    Display(obj);

    return 0;
}

这是输出

  • 你的数组是:你我们的元素是:9 8 7 6 5 3
  • 使用交换后反转你的元素是:3 5 6 7 8 9
  • 反转后:你的元素是:3 5 6 7 8 9 Segmentation fault
4

1 回答 1

3

您的代码分配了一个整数,然后将该整数视为一个数组。这里

b = new int;
for (i = obj->length - 1, j = 0; i >= 0; i--, j++)
    b[j] = obj->arr[i];

应该

b = new int[obj->length];
for (i = obj->length - 1, j = 0; i >= 0; i--, j++)
    b[j] = obj->arr[i];
于 2020-11-26T19:15:11.467 回答