qq_41160843 2018-10-08 23: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 05:13
    关注

    该回答引用ChatGPT

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

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

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

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

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

    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 损失匹配问题,求解答
  • ¥15 3500常用汉字书法体检测数据集下载
  • ¥15 odoo17在制造模块或采购模块良品与次品如何分流和在质检模块下如何开发
  • ¥15 Qt音乐播放器的音乐文件相对路径怎么写
  • ¥15 VB.NET利用摄像头拍照的程序
  • ¥15 linux下vscode设置不了字连体
  • ¥20 游戏mod是如何制作的
  • ¥15 关于#hadoop#的问题:按照老师上课讲的步骤写的
  • ¥20 有人会用这个工具箱吗 付fei咨询
  • ¥30 成都市武侯区住宅小区兴趣点