【发布时间】:2017-06-11 07:24:14
【问题描述】:
以下代码昨天编译好一段时间,开始出现abort trap: 6 错误,然后又正常运行了一段时间,又开始出现同样的错误。我查找的所有答案都处理一些固定指定长度的字符串。我在编程方面不是很有经验,因此对于为什么会发生这种情况的任何帮助表示赞赏。 (代码用于计算Zeckendorf representation。)
如果我只是使用printf 来逐个打印数字而不是使用字符串,则代码可以正常工作。
#include <string.h>
// helper function to compute the largest fibonacci number <= n
// this works fine
void maxfib(int n, int *index, int *fib) {
int fib1 = 0;
int fib2 = 1;
int new = fib1 + fib2;
*index = 2;
while (new <= n) {
fib1 = fib2;
fib2 = new;
new = fib1 + fib2;
(*index)++;
if (new == n) {
*fib = new;
}
}
*fib = fib2;
(*index)--;
}
char *zeckendorf(int n) {
int index;
int newindex;
int fib;
char *ans = ""; // I'm guessing the error is coming from here
while (n > 0) {
maxfib(n, &index, &fib);
n -= fib;
maxfib(n, &newindex, &fib);
strcat(ans, "1");
for (int j = index - 1; j > newindex; j--) {
strcat(ans, "0");
}
}
return ans;
}
【问题讨论】:
-
请注意,循环中的
if (new == n) { *fib = new; }没有任何用处,除非您在赋值后添加break;。 -
谢谢。是的,我打算在添加
*fib = fib2; (*index)--;后删除该部分