c++ - 在合并两个数组时,如果将数组大小作为用户的输入,那么它很好,但是如果使用 sizeof() 运算符,那么它是分段错误吗?
问题描述
//cin>>m>>n; //这使程序工作
我不明白为什么会这样。sizeof()
会给和分配相同的值m
,n
那么(cin)
为什么会有错误..?
#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
需要使用新值创建一个新数组,然后分配给该数组。
我们可以将您的代码更改为像这样工作
#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;
}
但我建议您使用标准 c++ 容器:
#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;
}
推荐阅读
- tensorflow - 价格预测的时间序列预测(预测问题)
- aws-code-deploy - CodeDeploy 代理未在版本相对路径“appspec.yml”的解压版本目录中找到 AppSpec 文件
- python - Django如何管理长后台进程?
- python - 如何遍历所有 CSV 文件,打开每个文件,并对每个文件执行一些操作?
- python - 在python中使用格式字符串读取输入
- android - Android MVVM 中的服务和 ViewModel - 它们如何交互?
- r - 存在 NA 值时如何正确使用应用函数
- ios - ld:在 IBMMobileFirstPlatformFoundation 中找不到 -lstdc++.6 的库
- python - Python 3,7 使用 Re 解码 METAR 信息
- angular - 将数据从组件绑定到模板