У меня есть некоторые C код, который содержит массив текста, который я пытаюсь манипулировать следующим образом: -перераспределить вызывает ошибку GLibC для массива указателей
- Выделяют массив указателей
dictionary
размераdictionary_size
инициализируешься 50 - Заменить все пробела и \ п с «\ 0»
- магазин адрес каждой 3-й строки (разделенный неизвестным числом \ п-й или пространства) в
dictionary
- Если
dictionary
полон, г ealloc по размеру,dictionary_size * 2
Код однако, вызывает следующее сообщение об ошибке: -
*** glibc detected *** ./crack: realloc(): invalid next size: 0x0000000001386010 ***
^Cmake: *** [run] Interrupt
Код выглядит следующим образом: -
// Replace all spaces with '\0'
for (i = 0; i < file_size; i++) {
if (temp_buffer[i] == ' ' || temp_buffer[i] == '\n') {
while (temp_buffer[i] == ' ' || temp_buffer[i] == '\n') {
temp_buffer[i] = '\0';
}
j++;
}
if ((j-1) % 3 == 0) {
dictionary[k] = temp_buffer+i;
k += 1;
if (k == dictionary_size) {
dictionary_size *= 2;
printf("Going to realloc to %d\n", dictionary_size);
dictionary = (char **)realloc(dictionary, dictionary_size);
}
}
}
[EDIT] На основе отладки У меня есть, самый первый realloc (до размера 100) терпит неудачу.
Наступает момент, когда вы больше не можете удвоить свое распределение ... видимо, распределение 19G больше, чем ваша система может поддерживать. Это не так удивительно, как вы сделали это так далеко в своем удвоении для начала. – mah
Привет, я добавил редактирование, спасибо –
Во-первых, был 'dictionary == NULL' или когда-либо установлен на основе возврата из' malloc() 'или это' realloc() 'первое, что вы когда-либо делали?Во-вторых, _invalid следующий размер: 0x0000000001386010_ предполагает, что размер не 100 ... вы подтвердили во время выполнения, что это то, что вы думаете, что это должно быть? – mah