此方法正在生成分段错误。该方法旨在返回列表的指定位置的值。该列表是多项式列表。它应该返回一个多项式。我尝试使用gdb,但它只是告诉我它是什么方法。
llink* get_specific(llist* node)
{
struct link * poly;
int i;
printf("Which polynomial do you want: ");
scanf("%d",&i);
llist* current;
current = node;
int j;
llist* temp;
for (j = 1;j < i;j++)
current = current->next;
poly = current->poly;
return poly;
}
编辑:用j修复错误并且不再分配内存后,这段代码第一次运行正常,但如果我第二次运行它会出错#/ p>
Edit2:
for (j = 1;j < i;j++)
current = current->next;
当访问for循环内部的行时,会导致分段错误。如果用户输入为1则运行正常但如果是其他任何错误则显示
答案 0 :(得分:3)
for (j == 1;j < i;j++)
应该是
for (j = 1; j < i; j++)
答案 1 :(得分:2)
NULL
llist* node
检查
llist* current
[llist* current = malloc(sizeof(llist));
] for (j == 1;j < i;j++)
应为for (j = 0;j < i;j++)
NULL
current
current->next;
醇>
注意:不要强制转换malloc()
。
答案 2 :(得分:2)
您的代码有内存泄漏。
例如,您分配了一个节点,但未使用该节点且未释放内存
llist* current = malloc(sizeof(llist));
current = node;
编写函数更简单
llink * get_specific( const llink *node )
{
size_t i;
printf( "Which polynomial do you want: " );
scanf( "%u", &i );
while ( node != NULL && i-- ) node = node->next;
return node;
}
您的代码中还有三种不同的类型:link
,llink
和llist
。我不知道他们的意思所以我在我的函数中只使用了一种类型llink。至少它指出了如何编写函数的正确方向。:)
答案 3 :(得分:1)
您的代码存在一些问题。我怀疑分段错误是因为您没有初始化j
变量。 for
循环中的初始化子句实际上是一个比较运算符。它应该是j = 1
(或可能是j = 0
)而不是j == 1
。
如果用户输入的数字超过列表末尾,也可能发生故障。你需要在循环中进行某种测试,以确保你不会超出界限。
值得注意的是,您实际上看起来并不需要malloc
次调用。你实际上似乎并没有使用你已经分配的内存(而且你也没有释放它,所以它会泄漏)。