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