0

我正在编写一个允许某人扩展 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 个元素时,程序会崩溃。

4

2 回答 2

0

The proper use of malloc is like malloc(String_Length * sizeof(char)+1). You should add 1 to account for the ending '\0' in the string.

于 2013-10-15T17:30:53.287 回答
0

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

于 2013-10-15T17:31:42.400 回答