C:“;分段故障(堆芯倾倒)“;

C:“;分段故障(堆芯倾倒)“;,c,C,这是我第一次学习C编程(一般来说,我对编程还是相当陌生的),如果我的任何问题看起来很基本,请道歉。我已经写完了我的代码,现在我已经花了几个小时在谷歌上搜索并试图自己解决这个问题,但我就是不知道我做错了什么。我将感谢任何帮助 我得到的错误是 Opening file: input1.txt Segmentation fault (core dumped) 我试图自己调试我的程序,但这段代码太高级了,我无法调试。正如我之前所说的,我对编程仍然是新手,我真的不知道我做错了什么 我正在附加我所处理的两

这是我第一次学习C编程(一般来说,我对编程还是相当陌生的),如果我的任何问题看起来很基本,请道歉。我已经写完了我的代码,现在我已经花了几个小时在谷歌上搜索并试图自己解决这个问题,但我就是不知道我做错了什么。我将感谢任何帮助

我得到的错误是

Opening file: input1.txt
Segmentation fault (core dumped)
我试图自己调试我的程序,但这段代码太高级了,我无法调试。正如我之前所说的,我对编程仍然是新手,我真的不知道我做错了什么

我正在附加我所处理的两个代码。提供了代码的某些部分,我必须为某些函数填空。我最初发布了整个代码,但评论说它太长了,所以我尽量删掉

提前感谢你们的帮助,我非常感谢

主要条款c:

int main(int argc, const char** argv)
{
    //bunch of codes I did not write//
    FILE *fileptr;
fileptr = fopen(fileName, "r");

struct HashMap *hashTable;
char *word;
while((word = nextWord(fileptr))){
    if((hashMapContainsKey(hashTable, word)) == 0) hashMapPut(hashTable, word, 1);
    else{
        int *t = hashMapGet(hashTable, word);
        (*t)++;
    }
}
fclose(fileptr);

for(int i = 0; i < hashTable->capacity; i++){
    HashLink *tempLink = hashTable->table[i];
    while(tempLink != NULL){
        printf("%s: %d\n", tempLink->key, tempLink->value);
        tempLink = tempLink->next;
    }
}

    // bunch more codes I did not write
}

从您的
main

    if(length == 0) free(fileWord);
    fileWord[length] = '\0';
如果
length==0
,这将崩溃,因为您在释放数组后使用了它

[编辑]

另外,在
hashMapCleanUp
函数中,更改以下内容:

void hashMapCleanUp(HashMap* map)
{
   assert(map != NULL);
   HashLink *link1;
   HashLink *link2;
   for(int x = 0; x < map->capacity; x++){
       link1 = map->table[x];
       while(link2 != NULL){
void hashMapCleanUp(HashMap*map)
{
断言(map!=NULL);
HashLink*link1;
HashLink*link2;
对于(int x=0;xcapacity;x++){
link1=地图->表格[x];
while(link2!=NULL){
进入:

void hashMapCleanUp(HashMap*map)
{
断言(map!=NULL);
HashLink*link1;
HashLink*link2;
对于(int x=0;xcapacity;x++){

link2=地图->表格[x]//这次更改为启动
gdb
…您介意创建一个吗?而且您确实确定您无法以任何方式、种类或形式减少重现问题所需的代码量?您是否尝试过?仅供参考,
c==EOF
-小心。
fgetc
出于某种原因返回
int
,并且
c
是否应该be相应地声明为。此外,您的哈希函数应返回无符号整数类型。(
unsigned int
size\t
是常见的)。抱歉,伙计们,我在这方面的帖子不多,不确定要包含多少。我修改了我的帖子,使其尽可能简短。谢谢建议:)
    if(length == 0) free(fileWord);
    fileWord[length] = '\0';
void hashMapCleanUp(HashMap* map)
{
   assert(map != NULL);
   HashLink *link1;
   HashLink *link2;
   for(int x = 0; x < map->capacity; x++){
       link1 = map->table[x];
       while(link2 != NULL){
void hashMapCleanUp(HashMap* map)
{
   assert(map != NULL);
   HashLink *link1;
   HashLink *link2;
   for(int x = 0; x < map->capacity; x++){
       link2 = map->table[x]; //Change this <----------------------
       while(link2 != NULL){