所以我有一个功能
f(int D[],int A[],int len){
for(int k = 0; k < len; k++)
D[k] = A[k];
如果输出D
,则数字都是错误的。调用f
函数D
在int* D = new int[100000];
函数中初始化为main
,A
一切都很好,因为我在函数中输出它看起来不错。所以...无法理解问题所在......我也尝试了memcpy(D+k,A+k,sizeof(int));
并且它无法正常工作。
答案 0 :(得分:1)
你的循环完美无缺。问题必须在您的代码中的其他位置。
以下是一个示例程序,它以三种不同的方式复制数据:for
循环,memcpy
和std::copy
:
#include <algorithm>
#include <cstring>
#include <iostream>
#include <iterator>
void copy1(int D[], int A[], int len) {
for(int k = 0; k < len; k++)
D[k] = A[k];
}
void copy2(int D[], int A[], int len) {
std::memcpy(D, A, len*sizeof(int));
}
void copy3(int D[], int A[], int len) {
std::copy(A, A+len, D);
}
int main () {
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *d = new int[10];
std::ostream_iterator<int> out(std::cout, ",");
// First, print the initial values
std::copy(d, d+10, out);
std::cout << "\n";
// Next do the copies and print the values again
copy1(d, a, 10);
std::copy(d, d+10, out);
std::cout << "\n";
copy2(d, a, 10);
std::copy(d, d+10, out);
std::cout << "\n";
copy3(d, a, 10);
std::copy(d, d+10, out);
std::cout << "\n";
}
我得到的输出是:
0,0,0,0,0,0,0,0,0,0,
1,2,3,4,5,6,7,8,9,10,
1,2,3,4,5,6,7,8,9,10,
1,2,3,4,5,6,7,8,9,10,
答案 1 :(得分:0)
在调试器中运行你的代码,看看你是否在A[]
中没有垃圾(函数调用后可能会出错)。另外,我建议您传递参考(例如int & D[]
和const int & A[]
- const
,以防止更改A
)。
答案 2 :(得分:0)
从一个最小的工作示例开始,如下所示,然后将其他代码集成到其中,直到出现问题。那将是你错误的根源。没有更多信息,这几乎是我能告诉你的全部内容;当您在C ++程序中遇到错误的值时,您可能会从未初始化的变量中读取。我建议你尝试在GDB这样的调试器中逐步执行你的程序。
#include <algorithm>
#include <iostream>
#include <iterator>
void f(int D[], const int A[], int len){
for(int k = 0; k < len; k++)
D[k] = A[k];
}
int main(int argc, char** argv) {
int A[] = { 1, 2, 3, 4, 5 };
int D[5];
f(D, A, 5);
std::copy(A, A + 5, std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
std::copy(D, D + 5, std::ostream_iterator<int>(std::cout, " "));
return 0;
}
除非您有充分的理由这样做,否则首选std::vector
和std::array
优于原始数组。但是,学习数组和指针如何工作是使用它们的一个很好的理由。
答案 3 :(得分:0)
我认为问题是你传入一个指向数组的指针 int * D = new int [100000];
但是,您的函数需要两个整数数组,这与指向数组的指针不同。
这是一个代码片段的SSCCE,表现得像你想要的那样:
#include <iostream>
using namespace std;
void f(int * d, int * a, int length){
for(int k = 0; k < length; k++){
d[k] = a[k];
}
}
int main() {
int* a = new int[9];
for(int i = 0; i < 9; i++){a[i] = i;}
int* d = new int[9];
f(d, a, 9);
for(int i = 0; i < 9; i++){
cout << d[i] << " ";
}
}