我正在尝试将值从一个数组复制到另一个数组中。原始数组的类型为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
答案 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;
}