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

0

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

Теги:
realloc

2 ответа

0

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню