qq_41160843 2018-10-09 07:17 采纳率: 0%
浏览 321

静态链表初始化中出现的问题?

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef struct  
{
    char *data;
    int cur; //指示器cur代表指针,指示的节点在数组中的相对位置
} Node,SLinkList[MAXSIZE];
void Initspace_SL(SLinkList &space)
{
    int i;
    for (i = 0; i < MAXSIZE-1;++i)
    {
    space[i].cur = i+1;
    }
    space[MAXSIZE-1].cur = 0;
}//初始化

根据反汇编的结果
mov %edx,(%rax)
gdb调试:
第一次执行循环的情况
rax中存的地址为0x7fffffffdd98,该地址的值为1
space[0].cur的地址是0x7fffffffdd98 ,该地址的值为1
第二次执行循环
rax中存的地址为0x7fffffffdda8,该地址的值为2
space[1].cur的地址是0x7fffffffe3d8 ,该地址的值为6300256
所以找到了问题,第一次执行循环,最后寄存器rax中存地址就是space[0].cur的地址,第二次执行rax存的地址不是space[1].cur的地址,所以第二次循环2
传递给了0x7fffffffdda8。
另外 用vs调试发现 给结构体分配了八个字节,所以每次从rax向space[i].cur的值传递是正确的,用gdb调试 ,确发现给space[1]分配了80个字节。同样在gdb中,按照八个字节计算space[1].cur 的应该是dda8,实际上是e3d8与dd98差了80个字节。

详细的调试过程 我把它贴在了博文里面。---------------------
https://blog.csdn.net/qq_41160843/article/details/82961963?utm_source=copy

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-01 13:13
    关注

    该回答引用ChatGPT

    静态链表初始化出现问题可能有以下几种情况:

    • 结构体定义问题:静态链表中的结构体定义不正确,导致在初始化时出现问题。
    • 内存分配问题:在初始化时没有正确分配内存,导致出现问题。
    • 指针操作问题:在对链表进行操作时,指针操作不正确,导致出现问题。

    针对你提供的代码,可能存在以下问题:

    • 结构体定义问题:你的静态链表结构体中的data成员是char指针类型,但是在初始化时并没有给它分配内存空间。这样可能导致在对data成员进行赋值时出现问题。可以考虑在初始化时对每个data成员分配一定的空间。
    • 内存分配问题:在Initspace_SL函数中,你给每个节点的cur成员赋值的方式是将其设为当前节点的下一个节点的相对位置。但是在该函数中并没有分配给每个节点具体的空间。如果你的空间没有被正确分配,可能导致节点之间的相对位置出现错误。
    • 指针操作问题:在Initspace_SL函数中,你对每个节点的cur成员赋值时,使用的是space[i].cur = i+1;的方式,这个操作是正确的。但是在你的反汇编结果和gdb调试中提到的问题中,是出现了指针操作错误的情况。这个问题可能与你的代码上下文有关,具体原因需要更多的信息才能确定。

    建议你检查一下代码中可能存在的问题,并结合具体情况进行分析和调试。

    评论

报告相同问题?

悬赏问题

  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。