2012-07-06 83 views
-5

所以我有一个功能C++基本数组赋值不工作

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

,如果我输出D的数字是完全错误的。函数f被调用Dmain函数中被初始化为int* D = new int[100000];,并且A都是好的,因为我在函数中输出它并且它看起来没问题。所以......无法理解问题出在哪里......我也试过memcpy(D+k,A+k,sizeof(int));,它不起作用。

+7

请张贴[SSCCE(http://sscce.org/)。 – ildjarn 2012-07-06 23:53:07

+1

如果你可以为你的段落设置可读性的格式,比如突出你的代码,或者把它放在不同的行上,这将会很有帮助。所有穿插在同一字体中的代码都很难做出来。这是为了你自己的利益,你的文章可读性越强,阅读它的人越多,并且希望有所帮助:) – Levon 2012-07-06 23:55:23

+0

有没有理由不能制作'A'和'D''std :: vector's,并且用'D = A;'来复制副本? – 2012-07-07 00:00:59

回答

0

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

+0

int&D []'和'const int&A []'不是有效的结构 - 你不能有引用数组。 – ildjarn 2012-07-07 00:09:39

+0

A是好的,因为我打印它,没关系! – exilonX 2012-07-07 00:09:47

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通过原始阵列。不过,学习数组和指针的工作原理是使用它们的好理由。

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, 
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] << " "; 
    } 
}