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

时间:2013-10-15 17:27:07

标签: c++ 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个元素时,程序崩溃。

2 个答案:

答案 0 :(得分:0)

正确使用malloc就像malloc(String_Length * sizeof(char)+1)一样。您应该在字符串中为结尾'\0'添加1帐户。

答案 1 :(得分:0)

您可以尝试使用strdup()代替。它将覆盖您忘记的NULL终止的一个字节。它更具可读性。