Cを使用してプログラムを作成するだけで、リストの作成、指定された現在のノードの挿入ノード、ノードなどを削除します。chars.exeの0x011414CEでスローされた例外:0xC0000005:アクセス違反の読み取り場所0x00000004
私はビジュアルスタジオ2015を使用していますので、デバッグしてビジュアルスタジオウォッチを使用してインサートノード後の機能をテストしようとしました。
chars.exeの0x011414CEで例外がスローされました:0xC0000005:0x00000004のアクセス違反を読み取るアクセス違反です。現在のノードの後ろにノードが正しく挿入されています。
chars.exeの0x011414CEで未処理の例外が発生しました。0xC0000005:0x00000004という場所を読み取るアクセス違反。だからここ
はので、ここで
#ifndef DLIST_H
#define DLIST_H
typedef struct DListNode_struct {
char *str;
int blankIndex;
int blankLength;
struct DListNode_struct *next;
struct DListNode_struct *prev;
} DListNode;
typedef struct DList_struct {
int size;
DListNode *head;
DListNode *tail;
} DList;
void DListConstruct(DList* list);
void DListInsertAfter(DList* list, DListNode* currNode, DListNode* newNode);
#endif // DLIST_H
が私の主な機能
#include <stdio.h>
#include <stdlib.h>
#include "dlist.h"
int main() {
DList* list = NULL;
DListNode* currNode = NULL;
DListNode* newNode1 = (DListNode*)malloc(sizeof(DListNode));
DListInsertAfter(list, currNode, newNode1);
return 0;
}
されており、ここで私は私のinsertafter機能を持っている私の.cファイルで構造体とリストの宣言と私の.hファイルであります
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dlist.h"
void DListConstruct(DList* list) {
list->head = NULL;
list->tail = NULL;
list->size = 0;
}
void DListInsertAfter(DList* list, DListNode* currNode, DListNode* newNode) {
DListNode* sucNode;
if (list->head == NULL) {
list->head = newNode;
list->tail = newNode;
}
else if (currNode == list->tail) {
list->tail->next = newNode;
newNode->prev = list->tail;
list->tail = newNode;
}
else {
sucNode = currNode->next;
newNode->next = sucNode;
newNode->prev = currNode;
currNode->next = newNode;
sucNode->prev = newNode;
}
}
私の質問に関連する投稿がいくつか見つかりましたが、いずれもインクルードされたリスト、またはCにはありません。
だから誰でもバグの場所を見つけるのを助けることができますか?
ありがとうございます。
デバッガは、segフォールトをトリガしているコード行を正確に伝える必要があります。それを最低限提供してください。デバッガをより効果的に使用する方法を学ぶことは貴重な時間です。 – kaylum