C++基本数组分配不起作用

C++ basic array assignment is not working

本文关键字:分配 不起作用 数组 C++      更新时间:2023-10-16

所以我有一个函数

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

如果我输出D数字都是错误的。调用函数 fDmain 函数中初始化为 int* D = new int[100000];A一切都很好,因为我在函数中输出它并且看起来不错。所以。。。不明白问题出在哪里...我也试过memcpy(D+k,A+k,sizeof(int));,但它不起作用。

你的循环工作得很好。问题必须出在代码中的其他位置。

下面是一个示例程序,它以三种不同的方式复制数据: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,

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

从如下所示的最小工作示例开始,然后将其他代码集成到其中,直到出现问题。这将是您错误的根源。没有更多信息,这几乎是我能告诉你的全部;当您在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而不是原始数组。不过,了解数组和指针的工作原理是使用它们的好理由。

我相信

问题是您正在传递指向数组的指针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] << " ";
    }
}