-4

所以我有一个功能

f(int D[],int A[],int len){ 
   for(int k = 0; k < len; k++)
      D[k] = A[k];

如果我输出D的数字都是错误的。该函数以函数中的初始化f方式调用,一切都很好,因为我在函数中输出了它,它看起来没问题。所以......无法理解问题出在哪里......我也尝试过,但它不起作用。Dint* D = new int[100000];mainAmemcpy(D+k,A+k,sizeof(int));

4

4 回答 4

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,
于 2012-07-07T00:13:21.240 回答
0

在调试器中运行您的代码,看看您是否首先没有垃圾A[](函数调用后可能会出错)。另外我建议您传递参考(例如int & D[]const int & A[]-const以防止更改A)。

于 2012-07-07T00:04:53.283 回答
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数组。不过,了解数组和指针的工作原理是使用它们的一个很好的理由。

于 2012-07-07T00:09:41.053 回答
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] << " ";
    }
}
于 2012-07-07T00:14:00.043 回答