Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Вы получаете эту ошибку, когда функция не находится на пути MATLAB или в pwd.
Первый, удостоверьтесь, что Вы можете найти функциональное использование:
>> which divrat
c:\work\divrat\divrat.m
, Если это возвращается:
>> which divrat
'divrat' not found.
Это не находится на пути MATLAB или в PWD.
1110-секундный, удостоверьтесь, что каталог, который содержитdivrat
, находится на пути MATLAB с помощью эти PATH
команда. Может случиться так, что каталог, что Вы думали, был на пути, не находится на самом деле на пути.
Наконец, удостоверьтесь, что Вы не используете "частный" каталог. Если divrat
будет в каталоге, названном частным, то это будет доступно функциями в родительском каталоге, но не из командной строки MATLAB:
>> foo
ans =
1
>> divrat(1,1)
??? Undefined function or method 'divrat' for input arguments of type 'double'.
>> which -all divrat
c:\work\divrat\private\divrat.m % Private to divrat
Как другие указали, это - очень, вероятно, проблема с путем функционального файла, не находящегося в 'пути' Matlab.
Один простой способ проверить это состоит в том, чтобы открыть Вашу функцию в Редакторе и нажать клавишу F5 . Это заставило бы Редактора попытаться петлять, и в случае, если файл не находится в пути, он предложит Вам с окном сообщения. Выберите Add to Path
в этом, и необходимо быть в порядке для движения.
Одно примечание стороны: в конце вышеупомянутого процесса командное окно Matlab даст ошибку при высказывании того, чтобы избегать аргументов: очевидно, мы не обеспечили аргументов, когда мы пытались работать от редактора. Но с этого времени можно использовать функцию из командной строки, дающей корректные аргументы.
Наиболее распространенная причина этой проблемы состоит в том, что Matlab не может найти файл на, он - путь поиска. В основном Matlab ищет файлы в:
pwd
); path
в командной строке) @(whatever the class of the first argument is)
, который находится в любом каталоге выше. , Поскольку кто-то еще предложил, можно использовать команду which
, но это часто бесполезно в этом случае - она говорит Вам, что Matlab не может найти файл, который Вы уже знали.
, Таким образом, первое, что нужно сделать, удостоверяются, что файл locatable на пути.
Следующая вещь сделать, удостоверяются, что файл, который находит matlab (использование, который) требует того же типа как первый аргумент, Вы являетесь на самом деле передающими. I.el, Если w
, как предполагается, другой класс, и существует divrat
, функция там, но w
на самом деле пуста, []
, таким образом, matlab ищет Double/divrat
, когда существует только @(yourclass)/divrat.
, Это - просто предположение с моей стороны, но это часто кусает меня.
Сама функция является действительным matlab-кодом. Проблема должна быть чем-то еще.
Попытка, вызывающая функцию из каталога, это расположено, или добавьте что каталог к своему searchpath использование addpath('pathname')
.
Код ошибки указывает, что функциональное определение не может быть найдено. Удостоверьтесь, что Вы вызываете функцию из той же рабочей области как divrat.m
, файл хранится. И удостоверьтесь divrat
, функция не является подфункцией, это должно быть первое объявление функции в файле. Можно также попытаться вызвать функцию от того же divrat.m
файл, чтобы видеть, ли проблема с выбором рабочей области или функцией.
Между прочим, почему Вы просто не сказали
s = sqrt(diag(C));
Разве, это не будет то же?
Кроме того, назовите его divrat.m
, не divrat.M
. Это не должно иметь значения на большинстве Ose, но кто знает...
можно также протестировать, может ли matlab найти функцию при помощи эти which
команда, т.е.
which divrat