如何在x86 MASM汇编中编写哈希表STRUCT?报错求解
x86 MASM哈希表结构体定义错误修正
错误原因分析
你的代码存在两处核心语法错误,都是MASM结构体定义的基础规则问题:
- 错误使用
PTR关键字:PTR是MASM指令中用于临时类型转换的操作符,不能用于结构体成员的类型声明。x86 32位环境下,所有内存指针都是32位(4字节),对应DWORD类型,直接用DWORD声明指针即可。 buckets成员语法混乱:结构体无法直接定义变长数组,正确做法是用DWORD存储桶数组的首地址(数组本身需要单独分配内存)。
修正后的正确代码
Include irvine32.inc .data ; 哈希表条目结构体:链表节点,存储键、值指针及下一个节点地址 HTEntry STRUCT key DWORD ? ; 指向null结尾字符串的指针 value DWORD ? ; 指向null结尾字符串的指针 next DWORD ? ; 指向桶中下一个HTEntry的指针 HTEntry ENDS ; 哈希表主结构体 HashTable STRUCT hashsize DWORD ? ; 当前哈希表的桶数量 maxLoadFactor DWORD ? ; 触发扩容的最大负载因子(例:100代表1.0) buckets DWORD ? ; 指向桶数组的指针,每个桶是HTEntry链表的头指针 HashTable ENDS
补充初始化示例
若要实例化哈希表,需要单独分配桶数组内存,例如:
; 初始化包含16个桶的数组,初始值全为0(空链表) bucketArray DWORD 16 DUP(0) ; 初始化哈希表实例 myHashTable HashTable <16, 100, OFFSET bucketArray>
内容的提问来源于stack exchange,提问作者justin hennis
相关产品推荐
相关产品推荐

