将链表从 C 代码传递到 C++ 是否存在已知问题?我有一个 Qt 对话,我要添加到旧版 C 代码中。Qt 类(在 C++ 库中)调用 C 库函数,该函数返回指向链表的静态指针。该列表是在 C 库中创建的。例如:
C代码:
typedef my_struct_s my_struct_t, *my_struct_p;
struct { 
  int some_data;
  double some_more_data;
  my_struct_p next;
} my_struct_s;
void create_list()
{
  my_struct_p next;
  SP_head = (my_struct_p) calloc(1, sizeof(my_struct_t));
  next = (my_struct_p) calloc(1, sizeof(my_struct_t));
  SP_head->some_data = 1;
  next->some_data = 2;
  SP_head->next = next;
}
static my_struct_p SP_head=(my_struct_p)0;
extern my_struct_p get_list() {
  if(!SP_head)
     create_list();
  return SP_head;
}
C++ 代码:
myclass::do_something()
{
    my_struct_p list = get_list();
    for(my_struct_p ptr = list; ptr; ptr = ptr->next)
    {
         std::cout << ptr->value;
    }
}
SP_head是有效的,并且在我获得它时包含一堆条目。在我的调试器中,我可以看到下一个条目已填充并且在从函数返回时有效get_list()。
当我尝试分配ptr=ptr->next时,无论是在 for 循环内还是在 while 循环结束时或通过临时指针,值都是null. IE
temp_ptr = ptr->next;  
// temp_ptr is null
// but I can see ptr->next looks ok in a debugger 
我现在更改了代码,将列表的每个元素复制到一个数组中并返回该数组,它工作正常。这是否与堆栈有关,并且与 C 和 C++ 不兼容,或者只是表明我在其他地方有内存问题?