处理数组时出错 C++

Error in Dealing with Arrays C++

本文关键字:C++ 出错 数组 处理      更新时间:2023-10-16

我在下面的代码中收到一个段错误,任何建议将不胜感激

谢谢

/*
 * File:   newmain.cpp
 * Author: user
 *
 * Created on 10 December, 2014, 7:18 AM
 */
#include <stdlib.h>
#include <iostream>
using namespace std;
int append(int a[], int b[], int m, int n);
int main() {

    int a[] = {1, 2, 3, 4};
    int b[] = {4, 5};
    int m = sizeof (a);
    int n = sizeof (b);
    append(a, b, m, n);
    return 0;
}
int append(int a[], int b[], int m, int n) {
    int i = 0, j = 0;
    while (i < m && j, n) {
        if (a[i] < b[j]) {
            cout << a[i++];
        } else if (a[i] > b[j]) {
            cout << b[j++];
        } else {
            cout << b[j++];
            i++;
        }
    }
    for(i=0;i<m;i++){
        cout<<a[i];
    }
    for(j=0;j<n;j++){
        cout<<b[j];
    }
}

sizeof返回类型的大小(以字节为单位(。 你有一个int数组,所以元素的数量是sizeof a / sizeof(int),或者更好的是sizeof a / sizeof a[0]

您的下一个问题涉及逗号运算符。

>sizeof (a)是数组中的字节数,而不是元素数。

您可以除以元素大小,sizeof(a) / sizeof(a[0]) .

或者你可以使用 std::extent<decltype(a)>::value .

或者你可以写一个小函数来给出数组的大小:

template <typename T, size_t N> size_t array_size(T(&)[N]){return N;}

或者你可以让你的函数成为一个模板,将数组引用而不是指针作为其参数,并从这些数组中推断出大小:

template <size_t n, size_t m>
int append(int (&a)[n], int (&b)[m]) {
    // your code here
}

循环条件中还有一个拼写错误:

while (i < m && j < n)
                  ^ not ,

最后,您声明append返回int,但不返回任何内容。要么返回某些内容,要么将返回类型更改为 void