“构建错误”错误-1073741819 - C

时间:2015-06-23 20:49:18

标签: c file-io struct linked-list

我的任务是从游戏Boggle中获取每个骰子的所有可能字母的数据文件。这是数据文件的副本:

   D R L X E I
   C P O H S A
   N H N L Z R
   W T O O T A
   I O S S E T 
   N W E G H E
   B O O J A B
   U I E N E S
   P S A F K F
   I U N H M Qu
   Y R D V E L
   V E H W H R
   I O T M U C
   T Y E L T R
   S T I T Y D
   A G A E E N

每个骰子需要6个字母,这些字母存储在链表中。当我尝试运行以下代码时,我不断收到错误代码:C:\Dev-Cpp\Makefile.win [Build Error] [Untitled1.o] Error -1073741819

我尝试过使用3种不同的IDE,但似乎总是会遇到一些编译问题。我似乎无法弄清楚我哪里出错了!无论如何,这还没有完成,但在我继续深入研究之前,我宁愿把它弄清楚。提前谢谢!

#include <string.h>
#include <stdlib.h>
#include <stdio.h>


#define LENGTH 80

struct boggleDataNode{
       char data[3];
       struct boggleDataNode *nextData;
}*head;

struct boggleDieSideNode{
       char dieSideData[3];
       struct boggleDieSideNode *nextSide;
}*head1;

void readData(struct boggleDataNode temp);

int main(){
    int counter = 0;
    struct boggleDataNode *head;
    struct boggleDieSideNode *head1;
    struct boggleDataNode *temp;
    *head = NULL;
    *head1 = NULL;
    *temp = *head;
    readData(*temp);


    system("pause");
    return 0;
}
void readData(struct boggleDataNode temp){
    //initializing variables including
    //opening the input file
    FILE *input = fopen("BoggleData.txt","r");
    int name =0; 
    int id=0;
    char data[96] ={};

    //error checking that the file opened
    if (input == NULL){
        fprintf(stderr, "Can't open input file!\n");
        exit(1);
    }
    while( fscanf(input, "%s", &data) != EOF)
           printf("%s", data);

}

4 个答案:

答案 0 :(得分:2)

在您的代码中,更改

struct boggleDataNode{
       char data[3];
       struct boggleDataNode *nextData;
}*head;

struct boggleDataNode{
       char data[3];
       struct boggleDataNode *nextData;
};

因为看起来你不需要为该结构提供全局指针。根据您的使用情况,本地head阴影

同样适用于head1

接下来,将NULL分配给指针本身,而不是指向的变量。 (FWIW,NULL本身是一个指针,但无效一个。)

更改

*head = NULL;

head = NULL;

答案 1 :(得分:1)

无论您的程序逻辑中的其他内容是错误的,

中的语法错误也是如此
 char data[96] ={};

因为ISO C禁止空数组初始值设定项。如果您的构建因此而中断,则可能会解释&#34;构建错误&#34;。如果您希望数据初始化为零,则可以使用单个= { 0 }

通过添加适当的选项来提高编译器的警告级别也是一个好主意。这是什么系统(OS)?哪个编译器?

答案 2 :(得分:1)

尝试从&#34;&amp; data&#34;中删除&符号因为我相信你正在尝试读取一个字符串,所以传递字符串,而不是直接字符串。

 while( fscanf(input, "%s", &data) != EOF)
       printf("%s", data);

所以你有这个:

  while( fscanf(input, "%s", data) != EOF)
       printf("%s", data);

答案 3 :(得分:0)

强烈建议,在编译以启用所有警告时,请修复这些警告。毕竟,编译器比我们人类更了解语言。

以下代码

1)干净利落地编译,

2)有不需要的项目被注释掉或#if 0 ...#endif out

3)检查输入错误

4)使用&#39; perror()&#39;正确输出系统功能错误信息    包括与当前“错误”相关的消息。值

5)在完成所有阅读后关闭输入文件

6)从输入文件中读取一个数字字符后,fscanf()将停止    因为%s会在任何“白色空间”时停止。遇到了。

#include <string.h>
#include <stdlib.h>
#include <stdio.h>


//#define LENGTH 80
// Note: surround numeric #defines with parens to avoid text substituion errors
#define MAX_DATA_LEN (96)

#if 0
struct boggleDataNode
{
       char data[3];
       struct boggleDataNode *nextData;
};
#endif

#if 0
struct boggleDieSideNode
{
       char dieSideData[3];
       struct boggleDieSideNode *nextSide;
};
#endif


void readData( void );

int main( void )
{
    //int counter = 0;
    //struct boggleDataNode *head = NULL;
    //struct boggleDieSideNode *head1 = NULL;
    //struct boggleDataNode *temp = NULL;

    readData();


    system("pause");
    return 0;
} // end function: main


void readData()
{
    //initializing variables including
    //opening the input file
    //int name =0;
    //int id=0;
    char data[ MAX_DATA_LEN ];

    FILE *input = fopen("BoggleData.txt","r");
    //error checking that the file opened
    if (input == NULL)
    {
        perror("Can't open input file!\n");
        exit(1);
    }

    // implied else, fopen successful

    while( 1 == fscanf(input, " %s", data)) // note: format string leading space to skip 'white space'
           printf("%s", data);

    fclose( input );
} // end function: readData