получить все значения тройного указателя C ++ - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть внешняя C-DLL, которую я использую в своем проекте C ++. Функция, с которой я столкнулся Get_ALLFiles(char*** listOfFiles, int* nbrOfFiles). Эта функция применяет некоторые критерии к папке и возвращает файлы, соответствующие критериям.

int nbrOfFiles= 0;
//just get the number of files 
Get_ALLFiles((char***)malloc(1 * sizeof(char***)), &ElementNbr);

// pointer allocation 
char ***MyFilesList = (char***)malloc(nbrOfFiles* sizeof(char**));
for (int i = 0; i < ElementNbr; i++) {
    MyFilesList [i] = (char**)malloc(ElementNbr * 32 * sizeof(char*));
    for (int j = 0; j < 32; j++)
        MyFilesList [i][j] = (char*)malloc(ElementNbr * sizeof(char));
}

//Now i will use the function in order to get all the files (in my exemple 
//I have 10 which respond the criteria 
Get_ALLFiles(MyFilesList , &nbrOfFiles);

В моем "MyFilesList" у меня есть только первый элемент, как я могу получить все элементы в "MyFilesList"?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

My думаю, состоит в том, что функция выделяет свою память сама, и вы должны передавать указатели на переменные, которые получают значения. Эмуляция переход по ссылке в С.

Что-то вроде

char** MyFilesList;
int NumberFiles;

// Get a list of all files
Get_ALLFiles(&MyFilesList, &NumberFiles);

// Print all files
for (int i = 0; i < NumberFiles; ++i)
{
    std::cout << "File #" i + 1 << " is " << MyFilesList[i] << '\n';
}

// Free the memory
for (int i = 0; i < NumberFiles; ++i)
{
    free(MyFilesList[i]);
}
free(MyFilesList);
0 голосов
/ 06 сентября 2018

Вы должны передавать адрес переменной в функцию, а не указатель на динамическую память.
То есть, как вы делаете с номером.

Затем функция выделит всю память и обновит вашу переменную через полученный указатель.

Как это:

char** MyFilesList = nullptr;
int nbrOfFiles = 0;
Get_ALLFiles(&MyFilesList , &nbrOfFiles);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...