Это моя структура:Инициализация динамического массива структур
typedef struct ElementToInsert {
char *key;
char *value;
} element;
Это моя функция:
void init_hash(int size, element**arr) {
*arr = malloc(size * sizeof(element*));
if (arr == NULL)
{
printf("Out of memory\n");
return 0;
}
for (int i = 0; i < size; i++) {
(*arr)[i].key = NULL;
(*arr)[i].value = NULL;
}
}
И main()
:
void main() {
element *hash_table = NULL;
int hash_table_size = 10;
init_hash(hash_table_size, &hash_table);
}
Проблема заключается в том, что, когда я запустите отладчик (в visual studio 2015) он не покажет мне все значения массива. Я ожидал увидеть что-то вроде: hash_table[0] = {key = NULL, value = NULL}, hash_table[1] = {key = NULL, value = NULL}
, но я вижу это:
Ваш код не имеет смысла. '* arr' является указателем на' element', поэтому вы должны выделить 'size * sizeof (element)' для него (то есть * размер * элементы, а не * размер * указатели). – melpomene
'* arr' - это то же самое, что и' arr [0] '. Ваша первая итерация цикла перезаписывает указатель, который вы получили от первоначального вызова 'malloc'. – melpomene
'main' должен возвращать' int', а не 'void'. – melpomene