Я новичок в C, но я пытаюсь решить проблему с LeetCode, чтобы получить больше опыта с хеш-таблицами.Запуск на моем собственном компьютере с Linux (конечно, без активации флага очистки адреса, моя программа, кажется, работает правильно, но решение функции в LeetCode всегда дает мне ошибку для переполнения кучи-буфера. Я не знаю, как это интерпретироватьи не знаю, что вызывает переполнение, я не могу найти место в своем коде, где я перехожу любую границу.
Это проблема из LeetCode:
Учитываямассив целых чисел, возвращает индексы двух чисел, так что они складываются в определенную цель.
Вы можете предположить, что каждый вход будет иметь ровно одно решение, и вы не можете использовать один и тот же элемент дважды.
Пример:
Учитывая числа = [2, 7, 11, 15], target = 9,
Поскольку числа [0] + числа [1] = 2 + 7= 9, return [0, 1].
Это мое решение (я использую шаблон LeetCode для функции "twoSum". Я не нахожу использование для "returnSize", но я просто оставил его там):
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
struct hashTable
{
int key;
int value;
};
int hash_number(int key, int size)
{
return key%size;
}
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int i;
int hashNumber;
int *returnArray;
int complement;
returnArray=(int*)malloc(2*sizeof(int));
returnArray[0]=-1;
returnArray[1]=-1;
struct hashTable *inputNumbers;
inputNumbers=(struct hashTable*)malloc(numsSize*sizeof(struct hashTable));
for(i=0; i<numsSize; i++)//filling up hash table
{
hashNumber=hash_number(nums[i], numsSize);
inputNumbers[hashNumber].key=i;
inputNumbers[hashNumber].value=nums[i];
}
for(i=0; i<numsSize; i++)
{
complement=target-nums[i];
hashNumber=hash_number(complement, numsSize);
if((inputNumbers[hashNumber].key!=i) && (inputNumbers[hashNumber].value==hashNumber))
{
returnArray[0]=i;
returnArray[1]=inputNumbers[hashNumber].key;
}
}
return returnArray;
}
Когда я выполняю тестовый прогон на своем Линух машина, работает нормально.Но в Leetcode я получаю ошибку, которая выглядит примерно так (я не копировал все это):
=======================================================================
30==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x606000000070 at pc
READ of size 4 at 0x60000000080 thread T0 #2 0x7....... in __lib_Start_main....
Любая помощь очень ценится!: D