第二个字符串在多次重新分配调用后损坏

Second string corrupt after multiple realloc calls

本文关键字:分配 调用 损坏 新分配 字符串 第二个      更新时间:2023-10-16

我正在编写一个函数,允许某人扩展 char* 数组,在做一些测试时,我注意到当我放置超过 3 个元素时,第二个元素会损坏。

这是函数本身:

    void Data::PushBack_String(char** PtrToPtr, char* Ptr, unsigned short Index)
    {
         unsigned short String_Length;
         for(String_Length = 0; Ptr[String_Length] != ''; ++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 以说明字符串中的结束''

您可以尝试改用strdup()。它将覆盖您忘记的 NULL 终止的一个字节。而且它的可读性要强得多。