Я писал функцию, которая позволяет кому-то расширять массив char *, и, выполняя некоторые тесты, я заметил, что когда я помещаю более трех элементов, второй становится чем-то искаженным.
Это сама функция:
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()
этого вы можете попробовать использовать strdup()
. Он будет охватывать один байт для завершения NULL, о котором вы забыли. И это гораздо читаемо.