Я писал функцию, которая позволяла бы кому-то расширять массив символов char *, и, проводя некоторый тест, я заметил, что когда я добавляю более 3 элементов, второй становится чем-то поврежденным.
Это сама функция:
void Data::PushBack_String(char** PtrToPtr, char* Ptr, unsigned short Index)
{
unsigned short String_Length;
for(String_Length = 0; Ptr[String_Length] != '\0'; ++String_Length);
++String_Length;
char* NewPtr = (char*)malloc(String_Length);
strcpy(NewPtr, Ptr);
PtrToPtr = (char**)realloc(PtrToPtr, Index);
PtrToPtr[Index] = NewPtr;
}
Также заметил, что когда количество элементов превышает 17 элементов, программа вылетает.
Правильное использование malloc
как malloc(String_Length * sizeof(char)+1)
, Вы должны добавить 1 в счет окончания '\0'
в строке.
Вы можете попробовать использовать strdup()
вместо. Это покроет один байт для нулевого завершения, которое вы забыли. И это гораздо более читабельно.