静态链表初始化:space[0].cur为1 space[1].cur为6300256,再往后就不对了,发现了原因,该怎么解决?程序小白求大佬解释

博客内容涉及静态链表初始化时出现错误,初始化代码在Linux C环境中运行,使用GDB进行调试。问题在于第二次循环时,`space[1].cur`没有得到正确赋值,原因是`rax`寄存器在第二次循环中存储的地址与`space[1].cur`的地址不匹配。此外,VS和GDB在结构体分配内存上有差异,VS每次分配8个字节,而GDB中`space[1]`分配了80个字节,导致地址计算错误。
摘要由CSDN通过智能技术生成
在这里插入代码片

详细的调试,和反编译过程如图片所示,最后发现原因简单描述如下:,
for(i = 0; i < MAXIZE-1;++i){space[i].cur = i+1;}MAXIZE-1为99
经过一些列操作,
最后i+1的值传递给了寄存器rax所存的地址所指的位置第一次循环,rax存的地址就是space[0].cur的地址
第二次循环,rax存的地址不是space[1].cur的地址,所以space[1].cur没有得到正确的值,
再往后的每一循环,也就都不对了。请问为什么。该怎么解决。
源码如下:

#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;
}//初始化
void Creatspace_SL(SLinkList &space)
{
    int i,j;
    printf("输入静态链表大小:");
    scanf(&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值