I need to write a hash function where I take the ascii values of every letter in a string and write them to a string, after which, I take said string and divide it into sub-sections consisting of 3 integers, get the sum of those integers, and modulo by a given prime number.

For example, if the key were "word", then the ascii values would be:

119 111 114 100

and the string to which I would write them would look like:

"119111114100"

Then get the first 3 sections of 3

119 111 114

Use sscanf to initialize three integers (a, b, c)

a = 119

b = 111

c = 114

Get the sum

sum = a + b + c

and modulo by a predefined prime number

Here's what I thought of:

Ideally I would want to be able to realloc "values" each time it concatenates to the string so that I don't end up wasting too much memory.Code:

int hashString (void *pKey)

{

int i, sum, a, b, c;

char *key, *values, temp[4];

key = (char*)pKey;

values = (char*)calloc(3 * strlen(key) + 1, sizeof(char));

for(i = 0; i < strlen(key); i++)

{

sprintf(temp, "%d", (int)key[i]);

printf("%s is the ascii value\n", temp);

if(strlen(values) == 0){

sprintf(values, "%d", temp);

}

else{

strcat(values, temp);

}

}

sscanf(values, "%3d%3d%3d", &a, &b, &c);

printf("%s is the total string\n", values);

//free(values);

sum = a + b + c;

return sum % SIZE;

}

Another thing, whenever I try to free values, my program crashes.

Any and all help is appreaciated