C ++基本数组赋值不起作用

时间:2012-07-06 23:51:44

标签: c++

所以我有一个功能

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];函数中初始化为mainA一切都很好,因为我在函数中输出它看起来不错。所以...无法理解问题所在......我也尝试了memcpy(D+k,A+k,sizeof(int));并且它无法正常工作。

4 个答案:

答案 0 :(得分:1)

你的循环完美无缺。问题必须在您的代码中的其他位置。

以下是一个示例程序,它以三种不同的方式复制数据:for循环,memcpystd::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::vectorstd::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] << " ";
    }
}