在合并两个数组时,如果将数组大小作为用户的输入,那么它很好,但是如果使用 sizeof() 运算符,那么它是一个分段错误?

While merging two arrays, if array size is taken as input from user then its fine but if sizeof() operator is used, then its a segmentation fault?

//cin>>m>>n; //这使程序工作

我不明白为什么会这样。 sizeof() 将与 (cin) 分配相同的值给 mn,那么为什么会出现错误..?

    #include<iostream>
    using namespace std;

    int * merge(int A[], int B[], int m, int n)
    {
        for(int i=m,j=0; i<(m+n);i++, j++)
        A[i]=B[j];

    }
    int main()
    {
        int A[]={1,2,3,4,5,6,7,8} , B[]={4,5,6},m,n;
        m=sizeof(A)/sizeof(int);
        n=sizeof(B)/sizeof(int);  
        merge(A,B,m,n);
        for(int i=0;i<(m+n);i++)
        cout<<A[i]<<" ";
        return 0;
    }

您的代码存在问题,您尝试在 A 分配的值之后写入。如果要向 A 添加值,则需要使用新值创建一个新数组,然后分配给它。

我们可以更改您的代码以使其正常工作like this

#include <iostream>

using namespace std;

// 1. Merge does not return anything, so so it should return void

void merge(int A[], int B[], int m, int n, int *R) {
    for (int i = 0; i < m; ++i) 
        R[i] = A[i];
    for (int i = m, j = 0; i < (m + n); i++, j++)
        R[i] = B[j];
}
int main() {
    int A[] = {1, 2, 3, 4, 5, 6, 7, 8};
    int B[] = {4, 5, 6};
    int m = sizeof(A) / sizeof(int);
    int n = sizeof(B) / sizeof(int);

    int result[m * n]; // Here the result will be stored

    merge(A, B, m, n, result);
    for (int i = 0; i < (m + n); i++)
        cout << result[i] << " ";
    return 0;
}


但我建议您使用 standard c++ containers:

#include <iostream>
#include <vector>


int main() {
    std::vector<int> A{1, 2, 3, 4, 5, 6, 7, 8};
    std::vector<int> B{4, 5, 6};
    
    A.insert(A.end(), B.begin(), B.end()); // Insert elements from B to A

    for (auto i: A) {
        std::cout << i << " ";
    }
    return 0;
}