Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2009, 23:05   #1
Warnes
Пользователь
 
Регистрация: 11.04.2009
Сообщений: 23
По умолчанию Проблемма при создании класса

Доброго времени суток!

Пишу другу класса на Delphi, и вылезла ошибка Access Violation at addres... одним словом с памятью проблемка. Обшарил все форумы и сайты но никто мне подсказать не смог.
Эх... всетаки ООП на php это детская шалость по сравнению с делфями...
Вот кусок кода:
Код:
type
  TMatrixSod= array of array of real;
  TVectorSod= array of real;
  TMatrixs = class(TObject)

  private
    FMSod: TMatrixSod;
    FVSod: TVectorSod;
    FRazm: Integer;
  public

    constructor Create (Count: integer; StringGrid: TStringGrid);
    procedure Vector(StringGrid: TStringGrid);
    procedure GetVector(StringGrid: TStringGrid);
    destructor Destroy; override;

    property Razm: integer read FRazm write FRazm ;

  end;

implementation

constructor TMatrixs.Create(Count: integer; StringGrid: TStringGrid);
  var i,j: word;
  begin
    FRazm:=0;                                // ОШИБКА
     SetLength(FMSod, Count, Count);  //и тут
     for i:=0 to Count-1 do
       for j:=0 to Count-1 do
         FMSod[i,j]:=StrToFloat(StringGrid.Cells[i,j]);

  end;
Заранее спасибо!
Warnes вне форума Ответить с цитированием
Старый 07.05.2009, 23:10   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
constructor TMatrixs.Create(Count: integer; StringGrid: TStringGrid);
  var i,j: word;
  begin
   inherited Create;
    FRazm:=0;                              
     SetLength(FMSod, Count, Count);
     for i:=0 to Count-1 do
       for j:=0 to Count-1 do
         FMSod[i,j]:=StrToFloat(StringGrid.Cells[i,j]);

  end;
а кто будет стандартный конструктор вызывать?
(он служить для выделения памяти)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 07.05.2009 в 23:16.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.05.2009, 23:13   #3
Warnes
Пользователь
 
Регистрация: 11.04.2009
Сообщений: 23
По умолчанию

Знаем...Делали...Результат нулевой.
Warnes вне форума Ответить с цитированием
Старый 07.05.2009, 23:18   #4
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Та тут проблема не токо в этом. Чето вы сильно усложнили себе задачу с созданием массива.

Код:
//--------------------------Поля---------------------------------
    fItems:array of Integer;
    fCount:integer;

//-------------------Чтение и запись свойст------------------------------
    procedure SetItem(Index:integer; item: integer);
    function  GetItem(index: Integer): integer;

    procedure SetCount(Temp: integer);
    function  GetCount: Integer;

public
    procedure Init;

    constructor Create;           
    destructor Destroy; override;

//----------------------------Свойства--------------------
    property Items[index: integer]: integer read GetItem write SetItem; default;

    property ItemCount: Integer read GetCount write SetCount;

//-----------------Конструктор---------------------------
constructor TSortArray.Create;
  begin
    inherited Create;
    fCount:=10;
    SetLength(fItems,fCount);
    Init;
  end;
//Метод инициализации массива
procedure TSortArray.Init;
var
  i:integer;
begin
  for i:=0 to fCount-1 do
    fItems[i]:=Random(100);
end;

//Установка размера массива и его заполнение (методы свойст)
function TSortArray.GetCount:integer;
begin
  result:=fCount;
end;
procedure TSortArray.SetCount(Temp:integer);
begin
if(fCount<>Temp) then
  fCount:=Temp;
End;


function TSortArray.GetItem(index:integer):integer;
begin
  result:=fItems[index];
end;
procedure TSortArray.SetItem(Index:integer; item: integer);
begin
if(fItems[index]<>item) then
  begin
    fItems[index]:=Item;
    SetLength(fItems,fCount);
  end;
end;
Если че не понятно, пиши - расскажу.

З.Ы. Пример для одномерного массива.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 07.05.2009, 23:31   #5
Warnes
Пользователь
 
Регистрация: 11.04.2009
Сообщений: 23
По умолчанию

Увы...

Вот облегчил класс до минимума (для примера)
Получилось:

Код:
unit Matrix;
interface
uses
 SysUtils,Classes;

type
  TMatrixs = class(TObject)

  private
    FRazm: Integer;
  public
    constructor Create ();
    procedure SetRazm(Temp:integer);
    function  GetRazm: Integer;
    property ItemRazm:integer read GetRazm write SetRazm;
  end;

implementation

constructor TMatrixs.Create();
  var i,j: word;
  begin
   inherited Create;
    FRazm:=0;  // упорно вылетает ошибка
  end;

function TMatrixs.GetRazm:integer;
begin
  result:=frazm;
end;

procedure TMatrixs.SetRazm(Temp:integer);
begin
  frazm:=Temp;
End;

end.
Warnes вне форума Ответить с цитированием
Старый 07.05.2009, 23:40   #6
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Этот ваш минимальный класс у меня работает.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 07.05.2009, 23:42   #7
Warnes
Пользователь
 
Регистрация: 11.04.2009
Сообщений: 23
По умолчанию

Такс...попахивает тухлым дебагом....
Warnes вне форума Ответить с цитированием
Старый 07.05.2009, 23:50   #8
Warnes
Пользователь
 
Регистрация: 11.04.2009
Сообщений: 23
По умолчанию

Есть еще у кого-нибудь мысли по поводу этого?
Warnes вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При создании нескольких экземпляров класса приложение зависает Mixasik Общие вопросы C/C++ 1 25.04.2009 13:25
Проблемма с выводом надписи при нажатии на кнопку prikolist Общие вопросы C/C++ 6 06.02.2009 16:11
Проблемма при создании Portable Demosfen Софт 3 05.07.2008 18:50
ошибка в создании класса juden Общие вопросы C/C++ 2 17.05.2008 15:04
При создании формы! Anton Помощь студентам 4 08.08.2007 08:20