嗯,我一直在研究C这个冬季假期,在我的冒险中,我偶然发现了一个动态数组问题。将一个值附加到一个动态数组的末尾
这确实是一个相当简单的程序。我正在尝试做的是创建一个包含斐波那契数列的数组。这里是代码:
#include <stdio.h>
#include <stdlib.h>
int dynamic_arry_append(int* arry, int* number, int* size);
int main() {
int i, n, size = 3, *arry = NULL, fibarr[size];
printf("Dynamic array, Fibonacci series. \n");
printf("Capture upto element: ");
scanf("%d", &n);
i = 0;
// passing the first elements
fibarr[0] = 0;
fibarr[1] = 1;
fibarr[2] = 1;
while (i < n) {
printf("**%d\n",fibarr[0]);
dynamic_arry_append(arry, &fibarr[0], &size);
fibarr[0] = fibarr[1];
fibarr[1] = fibarr[2];
fibarr[2] = fibarr[1] + fibarr[0];
i++;
}
for (i = 0 ; i < size ; i++)
printf("Element %d of the array: %d.\n", i, arry[i]);
return 0;
}
int dynamic_arry_append(int* arry, int* number, int* size) {
int i;
int bacon = *size; // first name i thought of
bacon++;
int *new_addr = realloc(arry, bacon * sizeof(int));
if(new_addr != NULL) {
arry = new_addr;
arry[bacon-1] = *number;
// printf for easier debugging, or so i thought
for (i = 0 ; i < bacon ; i++)
printf("%d\t%d\n", i+1, arry[i]);
printf("\n");
*size = bacon;
} else {
printf("Error (re)allocating memory.");
exit (1);
}
return 0;
}
至少在我的脑海里,这个作品。然而,在实践中,我得到有趣的结果:
Dynamic array, Fibonacci series.
Capture upto element: 5
**0 // next fibonacci number
1 5256368
2 5246872
3 1176530273
4 0
**1
1 5256368
2 5246872
3 1768053847
4 977484654
5 1
**1
1 5256368
2 5246872
3 1551066476
4 1919117645
5 1718580079
6 1
**2
1 5256368
2 5246872
3 977484645
4 1852397404
5 1937207140
6 1937339228
7 2
**3
1 5256368
2 5246872
3 1551071087
4 1953724755
5 842231141
6 1700943708
7 977484653
8 3
/* Code::Blocks output */
Process returned -1073741819 (0xC0000005) execution time : 17.886 s
Press any key to continue.
我真的被这个错误困惑,和周围搜索后,我发现无解...谁能帮助?非常感谢你。
什么是错误?它给fibonnaci罚款0 1 1 2 3 5 – 2011-12-28 09:29:15
在你调用'dynamic_arry_append'之前,尝试打印'arry'的值:'printf(“arry的值:%p \ n”,(void *)arry);' – pmg 2011-12-28 09:31:52
@ hermant:是的,但下面的行打印我想要存储的值的数组,这就是程序失败的地方 – rubbyrubber 2011-12-28 09:34:17