c - 链表 while 循环的段错误

标签 c while-loop linked-list segmentation-fault dynamic-memory-allocation

我在类里面的一个项目上遇到了问题。我在递归打印 spheres 链表时遇到了特别大的麻烦。每当程序运行到特定部分时:

ss=ss->next;

存在段错误:11。可能是什么问题? (注意:我已经包含了必要的structsspheresphere_list,并省略了rgbvec` 所以为了不弄乱代码。)

typedef struct sphere {
  vec *center;
  double radius;
  rgb *color;
} sphere;

typedef struct sphere_list sphere_list;
/* convention: NULL is the empty sphere list */
struct sphere_list {
  sphere *s;
  sphere_list *next;
};

void sl_print(sphere_list *ss)
{ 
if(ss==NULL)
  printf("SPHERE LIST EMPTY\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("SPHERE LIST:\n");
int i=1;
while(ss->s!=NULL){
  printf("\t%d ", i);
  sphere_print(ss->s);
  if(ss->next==NULL){
    printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    return;
    }
  ss=ss->next;
  i++;
  }
  printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
  return;
}

最佳答案

试试这个:

 void sl_print(sphere_list *ss)
 { 
  if(ss==NULL){
   printf("SPHERE LIST EMPTY\n");
   printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
   printf("SPHERE LIST:\n");
   return ;
  }
  int i=1;
  while(ss != NULL){
   printf("\t%d ", i);
   sphere_print(ss->s);
   ss=ss->next;
   i++;
  }
}

关于c - 链表 while 循环的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935502/

相关文章:

c - c中移位位的正确顺序

c++ - 当您声明 "pointer type"形式(函数)参数 "like an const array"时,const 是什么?

python - 如何将 4 个 while 三角形循环放在一起以生成 "diamond"?

javascript - 为什么在 Threejs 渲染函数中的 while 循环不更新每一帧?

C++ - 链表堆栈运算符重载函数

c - C-使用read()和write()从一个文件复制到另一个文件,而不使用文件功能

c - K&R - 练习 1-9 - 删除空格

validation - 使用nonewline在while循环中对读取主机数据条目进行Powershell验证

C++链表到skiplist的转换

java - Java中有双向链表实现吗?