Я пытаюсь получить доступ к члену структуры «Word» через другую структуру «Dict», используя двойной указатель **, но получаю ошибку «нарушение прав доступа» в Visual Studio 2010. Я проверил ссылку »доступ к двойному указателю на структуру«Также на stackoverflow, но это также не решает проблему. Может кто-нибудь, пожалуйста, помогите мне определить ошибку в коде? Я вставляю код здесь:
============================================
#include <iostream>
#include <stdlib.h>
#include <time.h>
//#include "dict.h"using namespace std;
enum WordType{All, Animal, Fruit, Name};
struct Word{
WordType type;
char word[20];
};
struct Dict{
int size;
int capacity;
Word **wordArray;
};
int main() {
Dict *dic = new Dict;;
dic->size=0;
dic->capacity=0;
strcpy((dic->wordArray[0])->word,"hi");
cout<< (dic->wordArray[0])->word;
system("pause");
return 0;
}
================================================== ======
Может быть, вы должны удалить двойной указатель и сделать что-то вроде:
struct Word{
WordType type;
char word[20];
Word* next;
};struct Dict{
int size;
int capacity;
Word *word;
};
и в основном:
dic->word = new Word;
dic->word.next = nullptr;
strcpy(dic->word->word,"hi");
и затем сделайте слово связанным списком, используя следующие указатели.
РЕДАКТИРОВАТЬ: вышеуказанное решение не может быть использовано, так как оригинальные структуры должны быть неизменными.
Может быть, попробовать что-то вроде:
Dict *dic = new Dict;;
dic->size=0;
dic->capacity=MAX_NUMBER_OF_WORDS;
dic->wordArray=new Word *[dic->capacity];
и при вставке новых слов:
dic->wordArray[dic->size] = new Word;
dic->size++;
И добавьте проверку емкости в зависимости от размера, чтобы избежать переполнения.
Кстати: не забудьте использовать удаление и все, что создано новым.
Глядя на ваш код, я не вижу причин, по которым Word в struct Dict должен быть двойным указателем.
Но я вижу очень вескую причину, по которой char внутри struct Word должен быть двойным указателем — это «массив слов» или двумерная матрица char.
Поэтому я предлагаю эту модификацию, которая работает …
#include <iostream>
#include <vector>
#include <complex>
#include <iostream>
#include <stdlib.h>
#include <time.h>
//#include "dict.h"using namespace std;
enum WordType{ All, Animal, Fruit, Name };
struct Word{
WordType type;
char** word;
};
struct Dict{
int size;
int capacity;
Word wordArray;
};
int main() {
Dict *dic = new Dict;
dic->size = 0;
dic->capacity = 0;
dic->wordArray.word = new char*[4]; // make an array of pointer to char size 4
for (int i = 0; i < 10; i++) {
dic->wordArray.word[i] = new char[5]; // for each place of above array, make an array of char size 5
}
strcpy_s(dic->wordArray.word[0], strlen("hi") + 1, "hi");
strcpy_s(dic->wordArray.word[1], strlen("John") + 1, "John");
strcpy_s(dic->wordArray.word[2], strlen("and") + 1, "and");
strcpy_s(dic->wordArray.word[3], strlen("Mary") + 1, "Mary");
cout << dic->wordArray.word[0] << endl;
cout << dic->wordArray.word[1] << endl;
cout << dic->wordArray.word[2] << endl;
cout << dic->wordArray.word[3] << endl;
system("pause");
return 0;
}