私はリンクされたリストに非常に慣れていて、少し助けが必要です。現在、私はこのエラーを」受け付けておりますCリンクされたリスト:アクセス違反の読み取り場所0x00000001
ConsoleApplication1.exeで0x0FD940C1(msvcr120d.dll)で未処理の例外:0xc0000005で:アクセス違反読み取り場所 0x00000001の
プログラムがやろうとしている何
。ファイルを取ってそれを反復し、リンクされたリストを作成します。各ノードは文字列値と次のノードへのノードポインタで構成されています。複数のチュートリアルに従っていますが、それは素晴らしいでしょう。
以下は私のコードです:
#ifdef _WIN32
#define _CRT_SECURE_NO_DEPRECATE
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFF_SIZE 300
typedef struct node {
char stringDat[BUFF_SIZE];
struct node* next;
} NODE;
int main(int argc, char** argv) {
FILE* fp;
FILE* fpLogFile;
char* fileLoc = "C:\\Users\\David\\Desktop\\data.dat";
char* logFile = "C:\\Users\\David\\Desktop\\log.txt";
char buff[BUFF_SIZE];
int i, nodeCnt;
if ((fp = fopen(fileLoc, "rb+")) == NULL) {
printf("FILE OPEN ERROR ON EXISTING FILE\n");
exit(1);
}
if ((fpLogFile = fopen(logFile, "w")) == NULL) {
printf("Error opening log file\n");
exit(1);
}
// root node
NODE* root = NULL;
// provide memory for root node
root = malloc(sizeof(NODE));
if (root == NULL){
return 1;
}
fprintf(fpLogFile, "%s\n", "ROOT MALLOC");
nodeCnt = 1;
// assign values to root node
root->next = NULL;
fprintf(fpLogFile, "%s\n", "ROOT Next = 0");
strcpy(root->stringDat, fread(buff, 20, 1, fp));
fprintf(fpLogFile, "%s\n", "ROOT buff");
// set curr to root node
NODE* curr = root;
fprintf(fpLogFile, "%s\n", "Curr = ROOT");
while (fread(buff, 20, 1, fp) != NULL) {
// navigate to last node in list
while (curr->next != NULL) {
curr = curr->next;
}
fprintf(fpLogFile, "%s\n", "Curr = last node");
// Create node at end of list
curr->next = malloc(sizeof(NODE));
fprintf(fpLogFile, "%s\n", "Malloc new Node");
nodeCnt++;
// move current node to last node
curr = curr->next;
if (curr == 0) {
fprintf(fpLogFile, "%s\n", "Out of memory");
return 0;
}
// assign val to current stringDat
strcpy(curr->stringDat, buff);
fprintf(fpLogFile, "%s %d %p %d\n", curr->stringDat, strlen(curr->stringDat), curr->next, nodeCnt);
for (i = 0; i < BUFF_SIZE; i++) {
buff[i] = 0;
}
}
while ((curr = root) != NULL) { // set curr to head, stop if list empty.
root = root->next; // advance head to next element.
free(curr); // delete saved pointer.
}
fclose(fp);
fclose(fpLogFile);
return 0;
}
エラーが何行で発生しますか? –
わかりません。エラーメッセージには含まれていません。そのため、fprintfをすべてログファイル経由でデバッグする作業を開始しました。しかし、私はファイルを読み込めるようになったことを知っています。それは、すべてのノードが狂っていることを追加し始めたときです。 – Dpry12
デバッガは正確にどこにあるのかを教えてください... –