Я вижу здесь различные проблемы.Прежде всего, это:
Example *new = (Example *)malloc(sizeof(Example*));
не выделяет нужное количество памяти (и вам не нужен приведение).Вы хотите это:
Example *new = malloc(sizeof(Example));
Затем вы говорите это:
new->one = 5;
, и это присваивает int
int*
;Это не очень хорошая идея, и Valgrind справедливо жалуется на это.Если ваш struct
правильно объявлен, то вы хотите следующее:
new->one = malloc(sizeof(int)); /* The other malloc doesn't allocate this, you have to. */
*(new->one) = 5;
Я подозреваю (как вы говорите, что все работает), что вы действительно хотите объявить свой struct
так:
typedef struct {
char *string;
int one;
int *two;
} Example;
но недостаточно информации, чтобы быть уверенным.Тогда у вас, вероятно, все еще есть похожие проблемы с new->two
.