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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.02.2016, 18:01   #1
AHNME
Пользователь
 
Регистрация: 20.12.2015
Сообщений: 18
По умолчанию ошибки вывода массива в WinForm

Если код оставлять более сжатым, то ошибок нет, но как только я пытаюсь вынести функцию генерации и вывода массива отдельно , то возникают небъяснимые мне ошибки, программа останавливается с крашем ее при на жатии генерации массива

Код:
#include "MyForm.h"
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

void AAR(int arrayDimension, int ** sampleArray);

void FillRRR(int arrayDimension, int ** sampleArray, System::Windows::Forms::DataGridView ^ dataGridView1);

void FillArray(int arrayDimension, int randomMax, int** array);
double AVR(int arrayDimension, int ** array);
void DeleteArray(int arrayDimension, int** array);

void PROJECT::MyForm::MyForm_Load(System::Object^ sender, System::EventArgs^ e)
{
	textBox2->Text = System::Convert::ToString(1);
	textBox1->Text = System::Convert::ToString(1);
	dataGridView1->ColumnCount = 1;
	dataGridView1->RowCount = 1;
}

void PROJECT::MyForm::button1_Click(System::Object^ sender, System::EventArgs^ e)
{
	int** sampleArray; // Описание динамического массива
	int rndMax; // Максимальное число для генератора случайных чисел
	int arrayDimension; // Размерность массива sampleArray

	arrayDimension = System::Convert::ToInt16(textBox2->Text);
	rndMax = System::Convert::ToInt16(textBox1->Text);

	dataGridView1->ColumnCount = arrayDimension;
	dataGridView1->RowCount = arrayDimension;


	AAR(arrayDimension, sampleArray);
	FillRRR(arrayDimension, sampleArray,dataGridView1);
	textBox3->Text = System::Convert::ToString(AVR(arrayDimension, sampleArray));
	DeleteArray(arrayDimension, sampleArray);
}

void AAR(int arrayDimension, int** sampleArray)
{                                                                         
	sampleArray = new int*[arrayDimension];
	for (int i = 0; i < arrayDimension; i++)  // в отдельную функцию
	{
		sampleArray[i] = new int[arrayDimension];
	}
}
 

void FillRRR(int arrayDimension, int** sampleArray, System ::Windows::Forms::DataGridView^ dataGridView1) {
	sampleArray = new int*[arrayDimension];
	for (int i = 0; i < arrayDimension; i++)
	{
		for (int j = 0; j < arrayDimension; j++)
		{
			dataGridView1->Rows[i]->Cells[j]->Value = System::Convert::ToString(sampleArray[i][j]); // тоже
		}
	}
}

void FillArray(int arrayDimension, int randomMax, int** array)
 {

	for (int i = 0; i < arrayDimension; i++)
	{
		for (int j = 0; j < arrayDimension; j++)
		{
			array[i][j] = rand() % randomMax;
		}
	}
}

double AVR(int arrayDimension, int** array)
{
	double srednee=0;
	for (int i = 0; i < arrayDimension; i++)
	{
		for (int j = 0; j < arrayDimension; j++)
		{
			srednee += array[i][j];
			
		}
	}
	return srednee / (arrayDimension*arrayDimension);
} 


void DeleteArray(int arrayDimension, int** array)
{
	for (int i = 0; i < arrayDimension; i++)
	{
		delete[]array[i];
	}
	delete[] array;
}


void PROJECT::MyForm::button2_Click(System::Object^  sender, System::EventArgs^  e) {
	Application::Exit();
}
ОШИБКИ

Код:
"PROJECT.exe": Загружено: "C:\Users\7admin7\Videos\PROJECT\Debug\PROJECT.exe", Символы загружены.
"PROJECT.exe": Загружено: "C:\Windows\SysWOW64\sspicli.dll", Невозможно найти или открыть PDB-файл.
"PROJECT.exe": Загружено: "C:\Windows\SysWOW64\bcryptprimitives.dll", Невозможно найти или открыть PDB-файл.

"PROJECT.exe" (Управляемый код (v4.0.30319)): Загружен "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll", загрузка символов пропущена. Модуль оптимизирован, включен режим отладки "Только мой код".

"PROJECT.exe": Загружено: "C:\Windows\SysWOW64\shell32.dll", Невозможно найти или открыть PDB-файл.
"PROJECT.exe": Загружено: "C:\Windows\SysWOW64\clbcatq.dll", Невозможно найти или открыть PDB-файл.
"PROJECT.exe": Загружено: "ImageAtBase0x8320000", Загрузка отключена параметром включения и исключения.
"PROJECT.exe": Загружено: "ImageAtBase0x8440000", Загрузка отключена параметром включения и исключения.
"PROJECT.exe": Выгружено: "ImageAtBase0x8320000"
"PROJECT.exe" (Управляемый код (v4.0.30319)): Загружен "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ru_b77a5c561934e089\mscorlib.resources.dll", загрузка символов пропущена. Модуль оптимизирован, включен режим отладки "Только мой код".
Вызвано исключение: "System.AccessViolationException" в PROJECT.exe
Необработанное исключение типа "System.AccessViolationException" в PROJECT.exe
Дополнительные сведения: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.

"PROJECT.exe": Загружено: "ImageAtBase0x5860000", Загрузка отключена параметром включения и исключения.
"PROJECT.exe": Загружено: "ImageAtBase0x5870000", Загрузка отключена параметром включения и исключения.
"PROJECT.exe": Выгружено: "ImageAtBase0x5860000"
"PROJECT.exe" (Управляемый код (v4.0.30319)): Загружен "C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll", загрузка символов пропущена. Модуль оптимизирован, включен режим отладки "Только мой код".
"PROJECT.exe": Загружено: "C:\Program Files (x86)\Common Files\Microsoft Shared\VS7Debug\14.0\Microsoft.VisualStudio.Debugger.Runtime.Impl.dll", Невозможно найти или открыть PDB-файл.
Программа "[5580] PROJECT.exe: Машинный код" завершилась с кодом -1 (0xffffffff).
Программа "[5580] PROJECT.exe: Управляемый код (v4.0.30319)" завершилась с кодом -1 (0xffffffff).
Пожалуйста, помогите исправить
AHNME вне форума Ответить с цитированием
Старый 29.02.2016, 18:15   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Видимо где-то некорректное обращение к массиву и т.п., например если пытаться работать с ним после освобождения памяти (DeleteArray) или к null или неинициализированной переменной обращаться.
По идее студия должна показать на какой примерно строке (если запускать с отладчиком, F5 или стандартная зеленая кнопка), а не только написать в вывод.

А зачем winsock2.h подключен если тут не используются сокеты?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 29.02.2016 в 18:18.
Alex11223 вне форума Ответить с цитированием
Старый 29.02.2016, 18:50   #3
AHNME
Пользователь
 
Регистрация: 20.12.2015
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение

А зачем winsock2.h подключен
На самом деле это оказалось тут случайно

Анализ кода :

Код:
Серьезность	Код	Описание	Проект	Файл	Строка
Предупреждение	CA1016	Добавьте атрибут AssemblyVersion в 'PROJECT.exe'.	PROJECT		
Предупреждение	C6001	Использование неинициализированной памяти "sampleArray".	PROJECT	c:\users\7admin7\videos\project\project\source.cpp	42
Предупреждение	C4700	использована неинициализированная локальная переменная "sampleArray"	PROJECT	c:\users\7admin7\videos\project\project\source.cpp	42
Предупреждение	C6001	Использование неинициализированной памяти "*sampleArray".	PROJECT	c:\users\7admin7\videos\project\project\source.cpp	66
Почему при создании отдельных функций и подключения в нужной последовательности, он не может инициализировать sampleArray, а если код в таком виде :

Код:
void PROJECT::MyForm::button1_Click(System::Object^ sender, System::EventArgs^ e)
{
	int** sampleArray; // Описание динамического массива
	int rndMax; // Максимальное число для генератора случайных чисел
	int arrayDimension; // Размерность массива sampleArray

	arrayDimension = System::Convert::ToInt16(textBox2->Text);
	rndMax = System::Convert::ToInt16(textBox1->Text);

	dataGridView1->ColumnCount = arrayDimension;
	dataGridView1->RowCount = arrayDimension;

	sampleArray = new int*[arrayDimension];
	for (int i = 0; i < arrayDimension; i++)  // в отдельную функцию
	{
		sampleArray[i] = new int[arrayDimension];
	}
	srand((unsigned)time(NULL));
	FillArray(arrayDimension, rndMax, sampleArray);

	for (int i = 0; i < arrayDimension; i++)
	{
	for (int j = 0; j < arrayDimension; j++)
	{
			dataGridView1->Rows[i]->Cells[j]->Value = System::Convert::ToString(sampleArray[i][j]); // тоже
		}
	}

	

	textBox3->Text = System::Convert::ToString(AVR(arrayDimension, sampleArray));
	DeleteArray(arrayDimension, sampleArray);
}
то все работает

функции :

Код:
void AAR(int arrayDimension, int** sampleArray)
{
	sampleArray = new int*[arrayDimension];
	for (int i = 0; i < arrayDimension; i++)  // в отдельную функцию
	{
		sampleArray[i] = new int[arrayDimension];
	}
}


void FillRRR(int arrayDimension, int** sampleArray, System::Windows::Forms::DataGridView^ dataGridView1) {
	sampleArray = new int*[arrayDimension];
	for (int i = 0; i < arrayDimension; i++)
	{
		for (int j = 0; j < arrayDimension; j++)
		{
			dataGridView1->Rows[i]->Cells[j]->Value = System::Convert::ToString(sampleArray[i][j]); // тоже
		}
	}
}
вот так они подключаются
Код:
AAR( arrayDimension,  sampleArray);
	FillRRR(arrayDimension,  sampleArray, dataGridView1);

	textBox3->Text = System::Convert::ToString(AVR(arrayDimension, sampleArray));
	DeleteArray(arrayDimension, sampleArray);

Последний раз редактировалось AHNME; 29.02.2016 в 19:08.
AHNME вне форума Ответить с цитированием
Старый 29.02.2016, 19:06   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Посмотрите что находится в переменной после вызова функции. Скорее всего вы по значению передаете и функция изменяет копию. Передавайте ссылку или указатель или возвращайте значение (return).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу ввода/вывода одномерного массива произвольного размера,... 4edder Паскаль, Turbo Pascal, PascalABC.NET 1 06.05.2014 20:09
найдите ошибки в составлении массива Yuuuu Помощь студентам 9 05.02.2012 22:56
Формат вывода и сложение массива OpenId Общие вопросы C/C++ 2 08.12.2010 18:53
Ошибки в функциях ввода-вывода (Си) spirit_trapper Помощь студентам 2 28.12.2009 12:54
Небольшой вопрос по ошибки ввода вывода. NoHeart Помощь студентам 4 19.01.2009 20:13