переменная двойного указателя, дающая ошибку нарушения доступа в программе структуры c ++

Я пытаюсь получить доступ к члену структуры «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;
}

================================================== ======

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++;

И добавьте проверку емкости в зависимости от размера, чтобы избежать переполнения.

Кстати: не забудьте использовать удаление и все, что создано новым.

0

Другие решения

Глядя на ваш код, я не вижу причин, по которым 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;
}
0

По вопросам рекламы [email protected]