我使用基于C的网络模拟器OPNET。在我的一个C文件(称为过程模型)中,我有一个全局可访问的链表(称为obstacle_list)。在下面的代码中,我用包含字符串的较小列表填充它。这似乎工作正常,我可以在最后回读整个列表。
但是我需要稍后从另一个C文件(流程模型)访问这个全局列表列表。
当我尝试访问此全局链接列表时,我可以看到它包含380个项目(正确),但是当我尝试访问内部链接列表时,它们是空的。
当我第一天填写列表时,它必须是内存分配疏忽。当我使用“input = op_prg_list_create()”行创建内部列表并使用strdup为列表内容分配内存时,我不明白为什么会发生这种情况。
我非常坚持这一点,所以对于可能发生的事情的任何帮助或指示都将非常感激。
非常感谢。
fgets(line, sizeof(line), obstaclePositions_traj_file);
obstacle_list = op_prg_list_create();
while (line != OPC_NIL)
{
token = strtok(line, "\t\n"); //Pull the string apart into tokens using the \t
input = op_prg_list_create();
while (token != NULL)
{
test_token = strdup(token);
if (op_prg_list_size(input) == 0)
op_prg_list_insert(input,test_token,OPC_LISTPOS_HEAD);
else
op_prg_list_insert(input,test_token,OPC_LISTPOS_TAIL);
token = strtok (NULL, "\t\n");
}
if (op_prg_list_size(obstacle_list) == 0)
op_prg_list_insert(obstacle_list,input,OPC_LISTPOS_HEAD);
else
op_prg_list_insert(obstacle_list,input,OPC_LISTPOS_TAIL);
}
//check the list has been populated correctly below (it has)
/*size_ob_list = op_prg_list_size (obstacle_list);
for (k = 0; k <size_ob_list; k++)
{
line_coord_list = (List*)op_prg_list_access (obstacle_list, k);
count_inner_list = op_prg_list_size (line_coord_list);
for (j=0; j< count_inner_list; j++)
{
coords = (char*)op_prg_list_access (line_coord_list, j);
printf("%c", coords);
}
}*/
答案 0 :(得分:0)
while (line != OPC_NIL) {}
是可疑的。
在EOF上,fgets()返回 null,但不会改变缓冲区(上一次成功调用的内容仍然在那里)
obstacle_list = op_prg_list_create();
while (fgets(line, sizeof(line), obstaclePositions_traj_file) )
{
input = op_prg_list_create();
for( token = strtok(line, "\t\n"); token ; token = strtok (NULL, "\t\n") )
{
test_token = strdup(token);
op_prg_list_insert(input,test_token
, (op_prg_list_size(input)==0) ? OPC_LISTPOS_HEAD : OPC_LISTPOS_TAIL
);
}
op_prg_list_insert(obstacle_list,input
, (op_prg_list_size(obstacle_list) == 0) ? OPC_LISTPOS_HEAD : OPC_LISTPOS_TAIL
);
}