2014-11-12 4 views
2

Предположим, у вас есть узел struct, с атрибутом, void* data.Установка значения указателя void на целое число

Можно ли установить значение этого указателя для некоторого произвольного целочисленного значения (т. Е. Вместо того, чтобы делать что-то вроде node->data = &random_integer).

Стараюсь следующие строки:

NodePtr node = malloc(sizeof(Node)); 
*((int*)(node->data)) = 0; 

компилируется без ошибок и предупреждений, но вызывает Segfault. Я не совсем уверен, почему.

Я мог бы легко установить указатель void на &int, но тогда мне пришлось бы выделить место для &int ... и это кажется ненужным для такой простой операции.

+0

Вы уверены, что инициализированы 'node-> data'? –

+0

@BlagovestBuyukliev Я уверен, что это не так. – weston

+0

Вы забываете выделить память 'node-> data'. i.e: 'node-> data = malloc (sizeof (int));' – whoan

ответ

2
*(node->data) 

Это означает, что вы пытаетесь прочитать из памяти, на которую указали данные node->. В вашем коде мы не видим, что node-> data указывает на любое место в памяти. Сначала укажите некоторую память для node-> data, используя malloc.

node->data = malloc(sizeof(int)); 

Затем попытайтесь получить доступ к значению или написать ему.

*((int *)(node->data)) = 1; /* or any value */ 
+1

Вы не можете напрямую разыменовать указатель 'void *'. Промежуточный набор 'int *' должен все еще присутствовать. –

+0

Хм, я думаю, я понимаю, сейчас. Даже если для указателя int есть место, ему все равно нужно выделить пространство для фактического целого числа. Спасибо! –

Смежные вопросы