グローバル変数ソースから構造体のリンクリストを取り込もうとしていますが、strcpy()行にBAD_ACCESSがあります。 C.誰かが問題を指摘できるかどうか疑問に思う。EXC_BAD_ACCESS(コード= 1、アドレス= 0x0)
#include "data_structs.h"
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINE_LEN 256
#define NUL '\0'
table_entry_t reg_list[]=
{
{"R0",0},{"PC",0},{"R1",1},{"SP",1},{"R2",2},{"SR",2},{"R3",3},
{"R4",4},{"R5",5},{"R6",6},{"R7",7},{"R8",8},{"R9",9},{"R10",10},
{"R11",11},{"R12",12},{"R13",13},{"R14",14},{"R15",15},{"R16",16}
};
... 構造体は、その(下)のように見え、.hファイルで定義されています。
グローバル構造体がように宣言されています。
typedef struct
{
char label[20];
int address;
}table_entry_t;
typedef struct
{
table_entry_t *data;
void *next;
} List_node_t;
typedef struct
{
List_node_t *head;
}list_t;
リンクリストを使用して初期化されます(下記)。 EXC_BAD_ACCESSは、行 "strcpy(new_node-> data-> label、reg_list [i] .label);"
boolean List_init (list_t *list)
{
int all_ok = False;
int i=0;
char* temp[3];
if (list != NULL) {
list->head = NULL;
//Add Register Labels
while(i<20) // 20 register labels
{
List_node_t *new_node = NULL;
new_node = (List_node_t *) malloc(sizeof(List_node_t));
strcpy(new_node->data->label,reg_list[i].label); <---BAD ACCESS
new_node->data->address = reg_list[i].address;
new_node->next = list->head->next;
list->head->next = new_node;
}
all_ok = True;
}
return all_ok;
}
目の新鮮なセットを気に入ってください。よろしくです。 よろしくお願いします。
は 'new_node-> data'のために割り当てられていません – BLUEPIXY
割り当ては正しく' new_node = malloc(sizeof * new_node); '参照:[** mallocの結果をキャストしますか?**](http:// stackoverflow。 com/q/605845/995714)をご覧ください。 new_node-> data = malloc(sizeof *(new_node-> data)); '割り当てを決して忘れることのない方法の1つは、' create_node(...) '関数を書くことです。 'node'、および' data'中の割り当てを必要とするポインタがあります。 (パラメータとして 'list_init'に、' create_node'に初期化するために必要な値を渡します)。 'free_node'と' delete_list'も同じように動作します。 –
'list_init'は、最初のノードアドレスを返してそれを呼び出し元関数のリストアドレスに戻さない限り、' list_init(list_t ** list、...) 'でなければなりません。どうして?最初のノードのアドレスは 'list'アドレスです。リストの*アドレス(つまり 'list_init(&list、...)')を渡さない限り、 'malloc'から返されたアドレスは決して' main'に反映されません(または 'list_init'の* type *が'list *'とあなたの戻り値と 'main'に最初のノードアドレスを割り当てます) –