저는이 간단한 문제는 확실하지만 구조체의 동적 배열을 구현하는 데이터 구조를 만들려고합니다.구조체에 대한 포인터의 동적 배열은 멤버 변수 지정시 SIGSEGV를 throw합니다.
각 구조체는 링크 된 목록을 구현합니다.
그래서 각 목록의 머리를 가리키는 포인터 배열이 필요하다고 생각합니다. 어떤 이유로, 메소드 변수를 지정하면 segault가 발생합니다. 나는 네가 할 수 있다면 내가 잘못하고있는 것에 대해 약간의 설명을 좋아할 것이다. 감사!
아, 또한이 모든 것이 캐시라는 클래스 안에 있으므로 정의되지 않은 일부 변수가있는 것이지만 그렇다고 확신합니다. 인덱스 [i] -> next = NULL에서 프로그램 seg faults; 그 밑에 비슷한 줄이있다.
typedef struct setNode {
char valid, dirty;
unsigned int tag;
setNode *next;
Cache *nextCache;
} set;
set **indexes;
arrayLength = cache_size/block_size;
indexes = new setNode *[arrayLength];
set *temp;
//Step through the array. The array is full of pointers to "Dummy Nodes"
for (size_t i = 0; i < arrayLength; i++) {
indexes[i]->next = NULL;
indexes[i]->valid = 0;
indexes[i]->dirty = 0;
indexes[i]->tag = 0;
//create empty linked list for each tag spot (One for direct mapped. etc...)
for(size_t i = 0; i < associativity; i++)
{
temp = indexes[i];
temp->next = new setNode;
temp = temp->next;
temp->next = NULL;
temp->valid = 0;
temp->dirty = 0;
temp->tag = 0;
}
}
}
오른쪽, 즉 의미가 [내가] = 새로운 세트를 -
는 포인터를 사용하기 전에, 당신은
set
객체를 할당하고 그들에게 포인터 지점을 만들 필요가 for 루프의 맨 위에서 이제는 작동합니다. 감사! 바보 같은 날, 나는 구조체와 클래스를 초기화 할 필요가 있다는 것을 알지 못했지만 배열에는 포인터가 있기 때문에 의미가있다. – usssrrrrrr1