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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 15:09   #1
Dick_Vladimir
Заблокирован
 
Регистрация: 14.11.2010
Сообщений: 5
Вопрос ОС Windows инициировала точку останова в МояПрограмма.exe.

ОС Windows инициировала точку останова в МояПрограмма.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в МояПрограмма.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит МояПрограмма.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки

/* Программа отлично работала пока не прикрутил меню. Кому интересно посмотрите исходник "Текст.txt". Компилирую через 2008-ю Вижуал студию. Язык С. */

Код:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <math.h>
//Структура, представляющая Сотовый
struct Sot
{
	char mark[50]; //Название марки
	char model[50]; //Название модели
	int price; //Цена
	int year; //Год выпуска
};

const int YearNow = 2010;
void printSot(Sot *s);
void printNew(Sot *s);

int _tmain(int argc, _TCHAR* argv[])
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	Sot *group = NULL;
	int num = 0;
	group = new Sot[num];

	int key = 0;
	do
	{
		system("cls");
		printf("1-Ввод количества телефонов \n2-Ввод информации о телефонах \n3-Просмотр всех телефонов \n4-Просмотр новинок \n0-Выход\n");
		key = getchar();
		switch(key)
		{
		case '1':
				printf("\t\tВвод количества телефонов\n");
					do
					{
						printf("Введите количество телефонов: ");
						scanf_s("%d", &num);
						if(num <= 0)
						{
							printf("Ошибка! Количество телефонов не может быть меньше 1.");
						}
					}while(num <=0);
		break;
		
		case '2':
			printf("\t\tВвод информации о телефонах");
				for (int i = 0; i < num; i++)
				{
					printf("\nВведите %d телефон: \n", i+1);
					
					printf("Введите марку телефона: ");
					scanf("%s", &group[i].mark);
					
					printf("Введите модель телефона: ");
					scanf("%s", &group[i].model);
					
					printf("Введите цену: ");
					scanf("%d", &group[i].price);
					
					printf("Введите год выпуска: ");
					scanf("%d", &group[i].year);
				}
		break;

		case '3':
			for (int i = 0; i < num; ++i)
			{
				printSot(&group[i]); //Выводим на экран
			}
		break;

		case '4':
			for (int i = 0; i < num; i++)
			{
				if(YearNow - group[i].year <= 1)
				{
					printNew(&group[i]);
				}
			}

		break;
		}
	}while(key != 0);
	return 0;
}

void printSot(Sot *s)
{
	printf("\nТелефон %s %s выпущенный в %dг стоит %d р.", s->mark, s->model, s->year, s->price);
	return;
}
void printNew(Sot *s)
{
	printf("\nНовинка!:\n Телефон %s %s стоимостью %d", s->mark, s->model, s->price);
	return;
}
Вложения
Тип файла: txt Текст.txt (2.0 Кб, 128 просмотров)

Последний раз редактировалось ACE Valery; 12.12.2010 в 15:40.
Dick_Vladimir вне форума Ответить с цитированием
Старый 12.12.2010, 15:11   #2
Dick_Vladimir
Заблокирован
 
Регистрация: 14.11.2010
Сообщений: 5
По умолчанию

Кстати помощь как и большинству нужна срочная. Через 12 часов мне надо закончить с этим кодом.
Dick_Vladimir вне форума Ответить с цитированием
Старый 12.12.2010, 15:39   #3
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Во-первых, код программы нужно писать текстом, а не делать вложения - это правило раздела.
Во-вторых,
Код:
Sot *group = NULL;
int num = 0;
group = new Sot[num];
Смотрите, здесь вы создаете массив на 0 элементов.
А здесь
Код:
case '1':
				printf("\t\tВвод количества телефонов\n");
					do
					{
						printf("Введите количество телефонов: ");
						scanf_s("%d", &num);
						if(num <= 0)
						{
							printf("Ошибка! Количество телефонов не может быть меньше 1.");
						}
					}while(num <=0);
		break;
вы вводите num, но от этого количество элементов в массиве не меняется. Оно остается 0.
А здесь
Код:
case '2':
			printf("\t\tВвод информации о телефонах");
				for (int i = 0; i < num; i++)
				{
					printf("\nВведите %d телефон: \n", i+1);
					
					printf("Введите марку телефона: ");
					scanf("%s", &group[i].mark);
					
					printf("Введите модель телефона: ");
					scanf("%s", &group[i].model);
					
					printf("Введите цену: ");
					scanf("%d", &group[i].price);
					
					printf("Введите год выпуска: ");
					scanf("%d", &group[i].year);
				}
		break;
вы делаете цикл, уже исходя из введенного пользователем значения num, и обращаетесь к несуществующим элементам массива.
Что надо делать: создавать массив после того, как пользователь ввел размерность массива, а не до. То бишь строку group = new Sot[num]; перенести в case '1' и поставить после while(num <=0);
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 12.12.2010, 15:49   #4
Dick_Vladimir
Заблокирован
 
Регистрация: 14.11.2010
Сообщений: 5
По умолчанию

Спасибо за оперативность, сейчас попробую, если заработает я Вас расцелую!)))
Dick_Vladimir вне форума Ответить с цитированием
Старый 12.12.2010, 15:55   #5
Dick_Vladimir
Заблокирован
 
Регистрация: 14.11.2010
Сообщений: 5
По умолчанию

Ядрена кочерыжка! Работает!))) Осталось пару getchar(); добавить и все!)))
Целую в обе щёчки!!! )))
Вопрос закрыт)
Dick_Vladimir вне форума Ответить с цитированием
Старый 12.12.2010, 16:44   #6
Д.В.А.
 
Аватар для Д.В.А.
 
Регистрация: 12.12.2010
Сообщений: 3
По умолчанию

ACE Valery, такой вопросик, а за что именно заблокировали пользователя Dick_Vladimir?
Время - деньги.
Д.В.А. вне форума Ответить с цитированием
Старый 12.12.2010, 17:01   #7
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Д.В.А., боюсь с этим вопросом помочь не могу, потому что это сделала не я.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 12.12.2010, 17:32   #8
Д.В.А.
 
Аватар для Д.В.А.
 
Регистрация: 12.12.2010
Сообщений: 3
По умолчанию

Че за дела, не пойму, то разблокируют, то заблокируют "навсегда"... Вы с пользователем Dick_Vladimir определитесь. Или удалите вообще. А лучше скажите причину блокировки.
Время - деньги.
Д.В.А. вне форума Ответить с цитированием
Старый 12.12.2010, 17:35   #9
Д.В.А.
 
Аватар для Д.В.А.
 
Регистрация: 12.12.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от ACE Valery Посмотреть сообщение
Д.В.А., боюсь с этим вопросом помочь не могу, потому что это сделала не я.
Да думал что может у вас, модераторов/админов база данных общая есть где можете посмотреть кого когда и за что забанили/удалили/заблокировали, или что то подобное...
Время - деньги.
Д.В.А. вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows 7 - нет доступа .exe 13th Свободное общение 6 03.10.2010 17:56
Точки останова Spot Общие вопросы Delphi 8 24.07.2010 19:56
сборка deb, rpm,exe в Windows papochka Qt и кроссплатформенное программирование С/С++ 3 19.03.2010 07:19
OC Windows инициировала точку останова в ... androidvsu Помощь студентам 6 19.09.2009 14:14
tchart - Как при наведении курсора на определенную точку сериэса узнать точку наведения и отобразить её xaero93 Помощь студентам 0 22.04.2009 19:28