Вы только что создали новый указатель MyStruct. Это означает:
Вы получаете выделенный блок памяти, достаточно большой, чтобы удерживать адрес, и назначать его указателю, указывающему на указатель, указывающий на член mystruct
. Это не означает, что в указателе есть допустимое удержание адреса, которое вы ожидаете указывать на элемент mystruct
. Даже в настоящее время нет даже допустимого адреса, на который указывает указатель на указатель, поскольку вы просто присвоили ему действительную область памяти, что не означает, что есть полезный адрес, который хранится.
Итак, совсем не то, что вы хотите:
Вы хотите, чтобы указатель, который имеет действительный блок памяти для хранения адреса другого указателя, который указывает на действительную область памяти, где находится (вероятно, действительный) mystruct
, хранится in.
Что вы делаете, так это: вы запрашиваете область памяти, в которой вы МОЖЕТЕ (то, что вы даже не делаете), сохраните poitner другому указателю ... и так далее.
так, что вы должны сделать, это:
mystruct **foo = new mystruct *;
*foo = new mystruct;
Забудьте '**' в C++, поверьте, вы ничего не потеряете. – deepmax
Примечание: я сменил тег C на C++, поскольку он использовал 'new', но, возможно, он хочет C-код, и jsut не знает, что новый не является частью C – dhein