我正在编写一个允许某人扩展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 :(得分:0)
正确使用malloc
就像malloc(String_Length * sizeof(char)+1)
一样。您应该在字符串中为结尾'\0'
添加1帐户。
答案 1 :(得分:0)
您可以尝试使用strdup()
代替。它将覆盖您忘记的NULL终止的一个字节。它更具可读性。