Выделяется память для массива указателей нежелательно освобождается - C (СИ)
Формулировка задачи:
Как вы видите, здесь выделяется память для массива указателей на "строки" analyzedTextArray[512], этот массив мне нужен для дальнейшей работы, а он зачем-то освобождается . . . . как сделать чтоб такого не происходило?
int getTextFromAnalyzedFile(char* analyzedFilePathName, char* analyzedTextArray[512])
{
FILE *analyzedFile = NULL;
char *analyzedFileWordArray;
char readStatus = OUT; /* статус чтение OUT - вне слова(пробел, запятая) IN - в слове */
char word[256];
char ch;
int length;
int state;
int wordLength = 0;
int wordNum = 0;
analyzedFile = fopen(analyzedFilePathName, "r");
if (analyzedFile == NULL)
{
printf("file %s not found\n", analyzedFilePathName);
return -1;
}
else
{
printf("file %s is opened\n", analyzedFilePathName);
}
while (!feof(analyzedFile))
{
ch = fgetc(analyzedFile);
if (isAlphabetChar(&ch) == 0)
{
if (readStatus == IN)
{
if (wordNum != 0)
{
wordLength++;
}
word[wordLength] = ch;
word[wordLength + 1] = '\0';
}
if (readStatus == OUT)
{
wordNum++;
wordLength = 0;
word[wordLength] = ch;
word[wordLength + 1] = '\0';
readStatus = IN;
}
}
else
{
if (readStatus == IN)
{
analyzedTextArray[wordNum] = (char*)malloc(sizeof(char)*128);
analyzedTextArray[wordNum] = word;
printf("word = %s\n", word); // дебаг)))
word[0] = '\0';
}
readStatus = OUT;
}
}
analyzedTextArray[wordNum + 1] = "NULL";
return 0;
}Решение задачи: «Выделяется память для массива указателей нежелательно освобождается»
textual
Листинг программы
analyzedTextArray[wordNum] = word;
Объяснение кода листинга программы
- В данном коде происходит выделение памяти под массив указателей на слова.
- Каждому слову в тексте присваивается уникальный номер в массиве указателей
wordNum. - Значение переменной
wordпредставляет собой слово из текста, которое добавляется в массив указателейanalyzedTextArray. - Значение переменной
wordNumпредставляет собой индекс, по которому происходит добавление слова в массив указателейanalyzedTextArray.