Я хочу отметить еще несколько проблем с этим кодом.Возможно, вам потребуется добавить более подробную информацию об этих точках.
Если вы хотите читать последовательные фрагменты из вашего файла, вам обычно не нужно изменять указатель get вашего файла.Просто прочитайте кусок, а затем прочитайте следующий.Если вам нужно прочитать фрагменты в случайном порядке, вам нужно использовать fseek .Таким образом вы корректируете начальную позицию следующей файловой операции смещением (от начала или конца файла или относительно текущей позиции).
У вас есть указатель на символchunk_buffer
, которую вы, очевидно, используете для временного хранения данных из вашего файла.То есть он действителен только для текущей итерации цикла.Если это так, я бы предложил сделать один раз malloc
перед входом в цикл:
char * chunk_buffer = malloc (MAXIMUM_CHUNK_SIZE);
в цикле, вы можете очистить этот буфер с помощью memset
или просто перезаписать данные.Также обратите внимание, что malloc()
ed память не инициализируется со значениями '\0'
(я не знаю, если это одно предположение, на которое вы полагаетесь ...).
Я неконечно, почему вы фактически выделяете буфер размером length*8
и просто читаете в него length
байтов.Вероятно,
int x = fread (chunk_buffer, SIZE_OF_ITEM, THIS_CHUNK_SIZE, c_file);
будет соответствовать вашим потребностям ближе, если ваши элементы действительно больше байта.
Неясно, что на самом деле делает функция md5()
,Какое значение это возвращает?Указатель на буфер, который выделяется динамически?Указатель на локальный массив?В любом случае, вы назначаете возвращаемое значение указателю на локальный массив char
с.Возможно, вам не нужно выделять 32
байтов для этого, а просто
char * hash = md5 (chunk_buffer);
Убедитесь, что вы храните указатель на этот массив где-то, где вы его найдете, когда цикл принимает следующую итерацию.Массив, созданный статически в локальной области действия этой функции, конечно, не может быть передан таким образом.
Ваша md5()
функция.Откуда он знает, каков размер куска?Передается указатель, но не размер действительных данных (насколько я вижу).Возможно, вам придется настроить эту функцию так, чтобы она принимала длину входного массива в качестве дополнительного параметра.
Что выдает функция md5()
, строка в стиле C (буквенно-цифровые цифры, нольили массив массивов без знака (uint8_t
)?
убедитесь, что вы free()
выделяете память динамически.Если вы хотите сохранить malloc()
внутри цикла, убедитесь, что цикл всегда заканчивается на
free (chunk_buffer);
Чтобы мы могли помочь вам в дальнейшем, вам нужно определить: а) чтоявляются логичными результатами для вас и б) какие результаты вы получаете