谁能告诉我C语言的问题

2025-03-06 21:43:47
推荐回答(5个)
回答1:

Trie树的底层数组已经是全局变量了,而我们知道,全局变量的内存是在堆上分配的,所以这不是栈空间不足的问题。

可以注意到,每个Trie树节点里放了1+1+27=29个int,而程序开了N=100000个节点,也就是29*N = 2900000个int的空间,2900000*sizeof(int)/1024/1024 = 11mb,11mb的空间在堆上分配绰绰有余,所以不会是内存不够大。

我copy程序下来跑了一遍,首先我不知道你的dic.dic文件的格式,所以我用txt来模拟,运行,出现内存读错误。

检查了一下发现

for(sl=0;sl


这句话,如果遇到空行是没办法结束的,我改成了

for(sl=0;sl    if(str[sl]=='/' || str[sl] == '\n')
        break;

接着是

str[sl]='{';

这句,我看不出让其等于{的意义,这也不符合常识,应该改成

str[sl]='\0';

这样子insert函数才能正常结束while(*s)循环。

最后是

d[L]={'a','b','a','c','o'};

这句,这样的初始化字符数组方法是不会在末位自动补上'\0'的,会导致find函数无法正常工作。所以要把L的值定义为6,即

#define L 6

然后将这个句子改成

d[L]={'a','b','a','c','o','\0'};

做了这些修改后,程序正常运行,也得到想要的结果。可以验证不是内存不足的问题。

回答2:

栈空间不够,这种大数据量一般使用动态内存分配,将内存空间分配到堆上去

// 分配内存
struct Trie *tree = NULL;
tree = (struct Trie *)malloc(N * sizeof(struct Trie));
// 回收内存
free(tree);

回答3:

这种问题当然是用链表了。

写一个结构体链表,然后再做一个结构体索引,可以加快查找速度

回答4:

能否简单谈谈你的编程思想

回答5:

可以把数组定义放在main的外面,也就是Intmain 的前面