2013-10-15 65 views
0

我正在寫一個函數,允許某人擴展一個char *數組,並且在做一些測試時我注意到,當我放入3個以上的元素時,第二個變成了損壞的東西。多次realloc調用後第二個字符串損壞

這是函數本身:

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種元素的程序崩潰。

+1

我可以想到學術課程以外沒有任何理由爲什麼你不使用'std :: unordered_map '完成這個任務。 – WhozCraig

+0

我知道有這樣的最簡單的方法,但我想學習如何操作動態數組。 – EnryFan

+0

你計算'String_Length'的方式是錯誤的。你在每個循環中增加兩次'String_Length'。如果長度奇數,它會傳遞字符串的末尾。 –

回答

0

正確使用malloc就像是malloc(String_Length * sizeof(char)+1)。您應該在字符串中添加1以結束'\0'

0

您可以嘗試使用strdup()來代替。它將覆蓋用於NULL終止的一個字節,您忘記了。它更可讀。