在做我的專案時,我遇到了一個問題。我似乎realloc沒有從原始陣列中復制所有資料。這就是我正在處理的(我知道代碼仍然缺少錯誤檢查):
char ** dictionary = (char**) malloc(512 * sizeof(char*));
for (int i = 0; i < 256; i )
{
dictionary[i] = (char*) malloc(2 * sizeof(char));
sprintf(dictionary[i], "%c", i);
}
char * character = dictionary[129];
char ** new_dictionary = realloc(dictionary, 1024);
dictionary = new_dictionary;
char * character2 = dictionary[129];
我首先創建一個指向 char 指標的指標陣列。然后我為每個位元組創建指向字符陣列的指標并分配位元組值。的值character和character2不同的值。為什么?我檢查了較低和較高的索引(幾個樣本)并且值保持不變。這是否與我試圖對realloc指標進行字符化而不僅僅是純資料有關?
uj5u.com熱心網友回復:
目前尚不完全清楚您要做什么。我假設您想增加記憶體并希望realloc復制初始記憶體塊的內容。
這不會在您的代碼中發生:
char ** dictionary = (char**) malloc(512 * sizeof(char*));
...
char ** new_dictionary = realloc(dictionary, 1024);
dictionary = new_dictionary;
char * character2 = dictionary[129];
您實際上是在縮小記憶體大小。最初,您為 512 個指標保留記憶體。然后你調整到 1024位元組。在 64 位系統上,僅足以容納 128 個指標。結果,dictionary[129]是一個越界訪問。
您可能想以這種方式調整大小:
realloc(dictionary, 1024 * sizeof *dictionary)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512693.html
標籤:CASCII重新分配
上一篇:為什么這個C輸入函式會崩潰?
