2014-11-06 3 views
0

я не знаю, почему, но я получаю эту ошибку:Получение ошибки: dlen = uint32 (0);

Error in mr_lsbpex (line 3) 
dlen = uint32(0) ; 

Output argument "a" (and maybe others) not assigned during call to "E:\path\mr_lsbpex.m>mr_lsbpex" 

Я испытал "dlen = uint32 (0);" в среде matlab (вне этой функции), и все было в порядке. Вот мой код:

function a = mr_lsbpex (r, p) 
% extract from an array 
dlen = uint32(0) ; 
s = size (r) ; 

rnd = rand (s(1),s(2)) ; 
rd = 32 ; 
rl = s(2) ; 

for i=1:s(2) 
    if rnd(1,i)<rd/rl 
     d = bitget (round(r(1,i)/p),1); 
     dlen = bitset (dlen,rd,d); 
     rd = rd -1 ; 
    end 
    rl = rl -1 ; 
end 

if (dlen > 10000000) 
    clear a ; 
    return ; 
end 

a = uint8(zeros(dlen,1)) ; 
rd = double(dlen * 8) ; 
rl = double(s(1)*s(2)-s(2)) ; 
for i=2:s(1) 
    for j=1:s(2) 
     if rnd(i,j)<rd/rl 
      d = bitget (round(r(i,j)/p) ,1) ; 
      a = z_set_bit (a,rd,d) ; 
      rd = rd - 1 ; 
     end 
     rl = rl - 1 ; 
    end 
end 
+0

Что говорит об ошибке? –

+0

@AnderBiguri сообщение редактируется –

ответ

2

Помните: a должен быть возвращен ВСЕГДА!


Ошибка не в этой конкретной строке, а в самой «целой» функции.

Ваша проблема в том, что Matlab считает, что a не будет создан. И на самом деле в некоторых случаях это может не быть создано.

Следующая строка в начале вашей функции должны сделать трюк

a=0; % well, or a=NaN; or whatever you want to return 

Кроме того, не clear a в if (dlen > 10000000).

+0

Спасибо, дорогой Андер –

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

  • Нет связанных вопросов^_^