复制到另一个阵列时会混淆值

时间:2015-02-27 05:36:37

标签: c arrays pointers io

我正在尝试将值从一个数组复制到另一个数组中。原始数组的类型为long int,并且它作为*pixel_frequency输入到函数中。我要复制的数组是temp,它是一个2D数组。但是,当我尝试复制值时,pixel_frequency很好,但temp会产生奇怪的结果。以下是相关代码和一些示例输出。

代码:

struct node *generate_nodes(long int *pixel_frequency) {
    int i;
    int temp[max_value + 1][2];

    for (i = 0; i < (max_value + 1); i++) {
        temp[i][0] = i;
        temp[i][1] = pixel_frequency[i];
        printf("Frequency for %d is %d\n", temp[i][0], temp[i][1]);
    }
...

输出(每个频率应为256):

Frequency for 0 is 150160
Frequency for 1 is 256
Frequency for 2 is 256
Frequency for 3 is 256
Frequency for 4 is 255
...
Frequency for 254 is 892677956
Frequency for 255 is 1868789101

1 个答案:

答案 0 :(得分:1)

下面是使用您的代码段的代码示例版本,负责返回类型和其他事项。

您可以将其作为函数参数传递,而不是使用全局变量作为函数参数,因此很容易识别传递的数组的大小。

void generate_nodes(long int *pixel_frequency, size_t size) {
    size_t i;
    long int temp[size][2];
    for (i = 0; i < size; i++) {
        temp[i][0] = i;
        temp[i][1] = pixel_frequency[i];
        printf("Frequency for %ld is %ld\n", temp[i][0], temp[i][1]);
    }
}

如果您已将pixel_frequency声明为函数中的局部变量,并且在变量超出范围后使用了数组的地址,则会导致未定义的行为。

int main(void) {
    size_t max_len = 5000;
    size_t i;
    long int* pixel_frequency = malloc(max_len*sizeof(long int));

    for( i = 0; i < max_len; ++i) {
        pixel_frequency[i] = (i%256);
    }

    generate_nodes(pixel_frequency, max_len);
    return 0;
}