У меня есть указатель на структуру. Я вызываю подпрограмму, которая определяет, нужна ли мне эта структура и выделяет место для нее, используя malloc, возвращая указатель на эту область или ноль, если он не используется.Почему указатель на область malloc'd терпит неудачу, если не скопирован?
Это работает, и я могу правильно получить доступ ко всем элементам структуры. Один из элементов узла struct - это следующий, который указывает на следующую структуру узла и указатель на строку, но возвращает указатель на строку, которая даже не существует в этой подпрограмме.
node_p=find_string(node_p->next,"string");
Однако это возвращает указатель в структуре к правильной строке.
struct node *node_p, *node_copy;
node_copy=find_string(node_p->next,"string");
Единственная разница заключается в использовании второго указателя вместо оригинала. Я делаю что-то неправильно здесь или должен быть глубже в вызываемой функции? Проблема с обвинениями в вызываемой функции заключается в том, что я использую ее в нескольких местах в течение нескольких месяцев без проблем, однако другие вызовы ищут только строку и никогда не переходят к «следующей».
EDIT: Дальнейшая отладка показала, что проблема заключается в том, что указатель передается find_string, а не возвращенный указатель. Это меняет вопрос и проблему, поэтому мне нужно открыть другой вопрос.
Звучит странно. 'find_string' должен возвращать' struct node * ', но вы говорите о возврате указателя на строку. Может быть, вы должны показать нам 'find_string', проблема, кажется, внутри этого. – Secure
... он должен быть таким же ... как вы проверяете, правильно это или нет? вы получаете доступ к 'node_p' или' node_copy' во втором образце? единственная разница заключается в том, что 'node_p' не разбивается ... – ShinTakezou
@Secure - да, find_string возвращает указатель на узел struct, который содержит указатель на строку. @ShinTakezou - я проверяю это, печатая строки node_p-> string и node_copy->. Второй печатает правильную строку. Первый печатает строку, не связанную с этой подпрограммой, но полностью используемую в другом модуле. – Rob