【发布时间】:2019-05-03 13:27:33
【问题描述】:
我的问题是关于动态内存分配和指针算术。我有一个在主函数中调用的函数,它应该用 n 个 long 填充数组,并用斐波那契数列动态填充它们。我的函数在下面,但它似乎没有给我正确的输出。
long* make_fib_array(long n){
int i;
long *fib;
fib = (long*)malloc(sizeof(long)*n);
if (fib == NULL){
printf("ERROR: Out of memory\n");
return NULL;}
*fib = 0;
*(fib +1) = 1;
for (i=2;i<n;i++);{
*(fib +i) = *(fib + (i-1)) + *(fib + (i-2));}
for(i=0;i<n;i++){
printf("%ld\n",*(fib + i));}
return fib;}
使用 0 和 1 的值可以很好地打印,但之后的值非常大并且不是预期的。我怀疑这与我的指针算术有关,但我不确定它是什么。
【问题讨论】:
-
*(fib + (i+1)) = 1;在分配值之前使用i-> 未定义的行为 -
我已经更正了,但错误仍然存在,不过我会为此编辑帖子,谢谢
-
@tribo32:您必须在使用之前像
int i = 0一样初始化i。否则i包含 ****junk*** 值
标签: c pointers dynamic-memory-allocation fibonacci pointer-arithmetic