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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2010, 20:30   #1
lobz1k
 
Регистрация: 17.05.2010
Сообщений: 4
По умолчанию Массив случайных чисел и ошибка Invalid pointer operation

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;


// -------------------------------------
int GetRnd(int min, int max) {
	int ch = rand();
	int v = max - min + 1;

	ch = ch % v;
	ch += min;
	return ch;
}

// --------------------------------------
int GetArrRnd(int* arr, int len, int min, int max) {
	for (int i = 0; i < len; i++) {
		arr[i] = 0;
	}
	int a = 0;
	int i = 0;

	while (i < len) {
		a = GetRnd(min, max);
		for (int j = i; j >= 0; --j) {
			if (arr[j] == a) {
				break;
			}
			if (j == 0) {
				arr[i] = a;
				++i;
			}
		}
	}
	return *arr;

}
// --------------------------------------
int len_otv;
int *otv = new int[len_otv];

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
len_otv = 8;
srand(time(NULL));
	GetArrRnd(otv, len_otv, 1, len_otv);



	Edit1->Text="";
for (int i = 0; i < len_otv; i++) {
	 Edit1->Text=Edit1->Text+" "+IntToStr(otv[i]);
}
delete otv;
}
//---------------------------------------------------------------------------
Долго не могу понять, в чем проблема, поискал по нету, решения не нашел. Прочитал что нужно после использования удалять delete[] otv; Но во-первых не помогает, а во вторых полученные данные нужно потом использовать. Подскажите, пожалуйста, в чём ошибка.
lobz1k вне форума Ответить с цитированием
Старый 05.06.2010, 20:40   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

функция GetArrRnd должна возвращать число int, а вы возвращаете указатель. В вашем случае эту функцию стоит сделать процедурой( void типа). Печатайте значения переменных, эту ошибку сложно обнаружить. Переводится как неверная операция с указателем. Думаю ошибка тут:
Код:
return *arr;

Последний раз редактировалось NiCola999; 05.06.2010 в 20:44.
NiCola999 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Invalid pointer operation. KoBRaAndrey Общие вопросы Delphi 6 02.06.2010 17:32
Invalid pointer operation и потоки zotox Помощь студентам 4 30.10.2009 14:38
Invalid Pointer Operation csander Общие вопросы Delphi 0 21.10.2009 17:44
Invalid Pointer Operation Unconnected Общие вопросы Delphi 3 21.02.2009 20:23
Invalid pointer operation Димарик Общие вопросы Delphi 2 05.11.2007 09:53