在合并两个数组时,如果将数组大小作为用户的输入,那么它很好,但是如果使用 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)
分配相同的值给 m
和 n
,那么为什么会出现错误..?
#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;
}
//cin>>m>>n; //这使程序工作
我不明白为什么会这样。 sizeof()
将与 (cin)
分配相同的值给 m
和 n
,那么为什么会出现错误..?
#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;
}