Вторая строка повреждена после нескольких вызовов realloc

Я писал функцию, которая позволяла бы кому-то расширять массив символов 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 элементов, программа вылетает.

0

Решение

Правильное использование malloc как malloc(String_Length * sizeof(char)+1), Вы должны добавить 1 в счет окончания '\0' в строке.

0

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

Вы можете попробовать использовать strdup() вместо. Это покроет один байт для нулевого завершения, которое вы забыли. И это гораздо более читабельно.

0

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