Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В экземпляре объекта не задана ссылка на объект. Ч 
:(
    Опции темы
oleeg
Дата 8.3.2010, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 27.11.2006

Репутация: нет
Всего: нет



Все привет. Есть библиотека, а в ней есть такой класс:

Код

public class Complex
{
    public double Re = 0.0;
    public double Im = 0.0;

    public Complex() { }
    public Complex(double re, double im){ Re = re; Im = im; }
}



Теперь пытаюсь тестить:
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MC_FFT_parallel;

namespace test_new_par
{
    class Program
    {
        static void Main(string[] args)
        {
            int n=(int)Math.Pow(2,2);
            Complex[] arr1 = new Complex[n];
            Complex[] arr2 = new Complex[n];
            Random r = new Random();
            Console.WriteLine("Re                    Im");
        // печатает нормально    
            for (int i = 0; i < n; i++)
            {
                arr1[i] = new Complex(r.NextDouble()*10,r.NextDouble()*10);
                arr2[i] = new Complex();
               
                Console.WriteLine(arr1[i].Re + "     " + arr1[i].Im);

            }
            FFT_parallel fft_p = new FFT_parallel();

            int n1 = 0;
            int n2 = 0;
            int np = 1;
            

        // тут выскакивает NullReferenceException  
            arr2 = fft_p.FFT(arr1, n1, n2, np);
            
            

            Console.ReadKey();
        }
               
    }
}


Есть идеи, почему выскакивает Exceprion?
Вот код dllки:

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MCSharp;

namespace MC_FFT_parallel
{
    public class FFT_parallel
    {
        public handler Wait void ()& channel Ready(){return ;}
        //    Cooley-Tukey Algorithm



        public Complex[] FFT(Complex[] X, int n1, int n2, int np)
        {
           int n = X.Length;
          Complex[] Y = new Complex[n];
          Complex[] P = new Complex[n];
          Complex[] T = new Complex[n];

            for (int k = 0; k < np; k++)
                Column_Iterative_Serial_FFT(X, Y, k * n2*n1/np, n1,n2,np);
            for (int k = 0; k < np; k++)
               Wait?();

            for (int i = 0; i < np; i++)
                Row_Iterative_Serial_FFT(Y, P, T, i * n1*n2/np, n1,n2,np);
           for (int i = 0; i < np; i++)
               Wait?();

            return T;
        }


        public async Column_Iterative_Serial_FFT(Complex[] a, Complex[] A, int start, int n1, int n2,int np)
        {
          int block_len=n1/np;
          for (int k = 0; k < block_len; k++)
                    Column_Iterative_FFT(a, A, start+k * n2, n1, n2);

          //Column Twiddle Factor Multiplication

          int x,y;          //x,y - indexes of column and row of transpose matrix accordingly
          double wn_Re=0,arg = 0,wn_Im=0,tmp=0;
          int ks,t=0,j=0,i=0;
          for (int q = 0; q < n2*block_len; q++)
                {
                    j = (int)Math.Ceiling((double)(q + 1) / n2) - 1;
                    i = q - ((q) / n2) * n2;
                    t =start+j * n2+i;

                   split_idx(t,n2,n1,out x, out y);
                    arg = 2 * Math.PI * x * y / (n2 * n1);
                    wn_Re = Math.Cos(arg);
                    wn_Im = Math.Sin(arg);

                    ks=t/n2+n1*(t-n2*(t/n2));

                   tmp = A[ks].Re * wn_Re - A[ks].Im * wn_Im;
                  A[ks].Im = A[ks].Re * wn_Im + A[ks].Im * wn_Re;
                  A[ks].Re = tmp;
           }
          Ready ! ();
        }

        public async Row_Iterative_Serial_FFT(Complex[] a, Complex[] A, Complex[] T,int start, int n1,int n2,int np)
        {
          for (int i = 0; i < n2/np; i++)
          {
           Row_Iterative_FFT(a, A, start+i * n1, n1);

           //Sort elements in right order to create output vector

           for(int q=0;q<n1;q++)
           T[TL_idx(start+i * n1+q,n1,n2)]=A[start+i * n1+q];
          }
          Ready ! ();
        }
        //Translate index i of untransposed vector to linearized index of transposed vector
        int TL_idx(int i, int raw_len, int col_len)
        {
            int raw_i = i / (raw_len);
            return ( raw_i + (i - raw_i * raw_len) * col_len );
        }

        //index delinearization
         void split_idx(int i,int raw_len, int col_len, out int x, out int y)
         {
           y = i / (raw_len);
           x=i - y * raw_len;
         }

         public void Column_Iterative_FFT(Complex[] a, Complex[] A, int start, int n1, int n2)
         {
              int j, k, m, m2, km2,ktemp, s;
              double wn_Re, wn_Im, w_Re, w_Im;
              double arg, t_Re, t_Im;
              double u_Re, u_Im, tmp;

              int logN = 0;
              m = n2;

              while( m > 1 )
              {
               m = m / 2;
               logN++;
              }

              int iTbcr=0;
              int ibcr=0;
              int temp;
              for (k = 0; k < n2; k++)
              {
               temp=bit_reverse(k, logN);
               iTbcr=(temp + start) / n2 + n1*(temp + start - ((temp + start)/ n2) * n2);
               ibcr=(k + start) / n2 + n1*(k + start - ((k + start)/ n2) * n2);
               A[iTbcr]=a[ibcr];
              }

              for ( s = 1; s <= logN; s++ )
              {
               m = 1 << s;

               arg = 2.0 * Math.PI / m;

               wn_Re = Math.Cos ( arg );
               wn_Im = Math.Sin ( arg );

               w_Re = 1.0;w_Im = 0.0;

               m2 = m >> 1;
               for ( j = 0; j < m2; j++ )
               {
                for ( k = j; k < n2; k += m )
                {
                 km2=(k + m2 + start)/n2 + n1*(k + m2 + start - ((k + m2 + start)/ n2) * n2);
                 ktemp=(k + start)/n2 + n1*(k + start - ((k + start)/ n2) * n2);

                 t_Re = w_Re * A [ km2 ].Re - w_Im * A [ km2 ].Im;
                 t_Im = w_Re * A [ km2 ].Im + w_Im * A [ km2 ].Re;

                 u_Re = A[ktemp].Re;
                 u_Im = A[ktemp].Im;

                 A[ktemp].Re = u_Re + t_Re;
                 A[ktemp].Im = u_Im + t_Im;

                 A [km2 ].Re = u_Re - t_Re;
                 A [ km2].Im = u_Im - t_Im;
                }
               tmp = w_Re * wn_Re - w_Im * wn_Im;
               w_Im = w_Re * wn_Im + w_Im * wn_Re;
               w_Re = tmp;
               }

          }

         }

        public void Row_Iterative_FFT(Complex[] a, Complex[] A, int start, int n1)
        {
              int j, k, m, m2, km2, s;
              double wn_Re, wn_Im, w_Re, w_Im;
              double arg, t_Re, t_Im;
              double u_Re, u_Im, tmp;

              int logN = 0;
              m = n1;
              while( m > 1 )
              {
               m = m / 2;
               logN++;
              }

              for ( k = 0; k < n1; k++ )
               A[bit_reverse(k, logN) + start] = a[k + start];

              for ( s = 1; s <= logN; s++ )
              {
               m = 1 << s;

               arg = 2.0 * Math.PI / m;

               wn_Re = Math.Cos ( arg );
               wn_Im = Math.Sin ( arg );

               w_Re = 1.0;w_Im = 0.0;

               m2 = m >> 1;
               for ( j = 0; j < m2; j++ )
               {
                for ( k = j; k < n1; k += m )
                {
                 km2 = k + m2+start;

                 t_Re = w_Re * A[ km2 ].Re - w_Im * A[ km2 ].Im;
                 t_Im = w_Re * A[ km2 ].Im + w_Im * A[ km2 ].Re;

                 u_Re = A[k + start].Re;
                 u_Im = A[k + start].Im;

                 A[k + start].Re = u_Re + t_Re;
                 A[k + start].Im = u_Im + t_Im;

                 A[ km2 ].Re = u_Re - t_Re;
                 A[ km2 ].Im = u_Im - t_Im;
                }

               tmp = w_Re * wn_Re - w_Im * wn_Im;
               w_Im = w_Re * wn_Im + w_Im * wn_Re;
               w_Re = tmp;
               }
              }
         }

        public  int bit_reverse(int k, int size)
        {
            int right_unit = 1;
            int left_unit = 1 << (size - 1);

            int result = 0, bit;

            for (int i = 0; i < size; i++)
            {
                bit = k & right_unit;
                if (bit != 0)
                    result = result | left_unit;
                right_unit = right_unit << 1;
                left_unit = left_unit >> 1;
            }
            return (result);
        }

        public static string Usage()
        {
            StringBuilder s = new StringBuilder();
            for (int i = 0; i < Console.WindowWidth; i++) s.Append("-");
            return  ( s.ToString() + Environment.NewLine +
                          "Usage: pFFT.exe p n1 np" + Environment.NewLine +
                          "where" + Environment.NewLine +
                          " p -  n=2^p - input vector length" + Environment.NewLine +
                          " n1 - width of block" + Environment.NewLine +
                         " np - number of processes" + Environment.NewLine +
                         s.ToString() + Environment.NewLine );
        }


    }

    public class Complex
    {
        public double Re = 0.0;
        public double Im = 0.0;

        public Complex() { }
        public Complex(double re, double im) { Re = re; Im = im; }


    }
   

}


PM MAIL   Вверх
Pilger
Дата 8.3.2010, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 10.5.2008
Где: Германия

Репутация: нет
Всего: нет



Пошагово посмотреть можно легко и найти ошибку.


--------------------
Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert.
PM MAIL ICQ   Вверх
oleeg
Дата 8.3.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 27.11.2006

Репутация: нет
Всего: нет



Пробовал. Исключение выскакивает здесь: 
Код

arr2 = fft_p.FFT(arr1, n1, n2, np);

PM MAIL   Вверх
Pilger
Дата 8.3.2010, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 10.5.2008
Где: Германия

Репутация: нет
Всего: нет



Ты уверен, что не внутри функции?


--------------------
Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert.
PM MAIL ICQ   Вверх
oleeg
Дата 8.3.2010, 21:21 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 27.11.2006

Репутация: нет
Всего: нет



Цитата(Pilger @ 8.3.2010,  20:50)
Ты уверен, что не внутри функции?

А как это выяснить?
PM MAIL   Вверх
Voyager
Дата 9.3.2010, 16:02 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



F11
PM   Вверх
oleeg
Дата 11.3.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 27.11.2006

Репутация: нет
Всего: нет



Через F11 не получается. Дело в том, что вызываемый метод находится в dll. При пошаговом выполнении программа останавливается на этом методе.
Как можно еще проверить, в какой строке методы, вызываемого из dll, выскакивает исключение?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.