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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2011, 01:05   #1
dasvex
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 39
По умолчанию ошибка очистки памяти символьного массива BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

заголовочный фаил класса:
Код:
#pragma once

class classs
{
public:
classs(void) ;
~classs(void);

void set_message(void);
char* output_qwestions(short);
void input_answer(short, char* );
char* show_info(short);
char* show_user_info(short);

private:
char **p_message;
char **p_data;
};
ссп фаил класса:


Код:
#include "StdAfx.h"
#include "classs.h"

classs::classs(void)  
{
//выделяется память под 2 символьных массива 
//массив p_data - хранилище данных которые ввел пользователь 
//массив p_message -  массив сообщений 
	p_data=new char *[4]; //
	for(short i=0;i<4;i++)p_data[i]=new char[20];

	p_message= new  char *[8];
	for (short i=0;i<8;i++){p_message[i]=new char [20];}

}

classs::~classs(void)
{	
	for(short i=1;i<8;i++){
	delete []p_message[i];//собственно в этой строке и появляется ошибка
	}
	delete[]p_message;


	for(short i=0;i<4;i++){
	delete []p_data[i];//в этой также возникает аналогичная ошибка
	}
	delete[]p_data;
}

void classs::set_message(void)
{
//заполняю массив сообщений ими же :D

	p_message[0]="Введите ваше имя";
	p_message[1]="Введите ваш рост:";
	p_message[2]="Введите ваш вес:";
	p_message[3]="Введите должность:";

	p_message[4]="Ваше имя:";
	p_message[5]="Ваш рост:";
	p_message[6]="Ваш вес:";
	p_message[7]="Ваша должность:";
}


char* classs::output_qwestions(short i)
{   //сделана для вывода сообщений
return 	p_message[i];
}


void classs::input_answer(short i,char *tmp)
{
//переношу введеные пользователем данные в массив p_data
for(short j=0;j<20;j++){
		p_data[i][j]=tmp[j];
	}

}


char*  classs::show_info(short i)
{
//для вывода данных
return p_message[i];
}


char* classs::show_user_info(short i)
{
//для вывода данных
return p_data[i-4];
}
спп с мэин функцией:
Код:
// 2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "classs.h"
#include <iostream >

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
setlocale(0,"rus");

classs *p_obj_classs=new classs;
p_obj_classs->set_message();

for(short i=0;i<4;i++){
	cout<<p_obj_classs->output_qwestions(i)<<endl;//вывод вопосов на экран
	
	char tmp[20];
	cin>>tmp;//вводим ответы на вопросы
	p_obj_classs->input_answer(i,tmp);//копирую в массив p_data
	}

for(short i=4;i<8;i++){
	cout<<p_obj_classs->show_info(i);//
	cout<<p_obj_classs->show_user_info(i)<<endl;//вывод ответов пользователя
}
    system("pause");
    delete p_obj_classs; // удаляю обьект , вызывая тем самым деструкторв котором пытаюсь очистить память выделенные под массивы.безуспешно (
	return 0;
}
знаю что есть 2 одинаковые функции с разными именами просто так получилось ) не беда .потом уберется.
заранее извиняюсь за возможный "не формат" поста.
dasvex вне форума Ответить с цитированием
Старый 08.08.2011, 01:43   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Код:
void classs::set_message(void)
{
//заполняю массив сообщений ими же :D

	p_message[0]="Введите ваше имя";
	p_message[1]="Введите ваш рост:";
	p_message[2]="Введите ваш вес:";
	p_message[3]="Введите должность:";

	p_message[4]="Ваше имя:";
	p_message[5]="Ваш рост:";
	p_message[6]="Ваш вес:";
	p_message[7]="Ваша должность:";
}
Вы строки неправильно копируете.
Код:
	strcpy(p_message[0], "Введите ваше имя");
	strcpy(p_message[1], "Введите ваш рост:");
	...
А у вас получается попытка освобождение константы в программе
netrino вне форума Ответить с цитированием
Старый 08.08.2011, 02:05   #3
dasvex
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 39
По умолчанию

да действительно. теперь никаких проблем .жаль конечно что к файлу пришлось подключать библиотеку строки (просто это меня напрягает слегка когда к файлу не основного класса подключаются лишние библиотеки )но все равно огромное спасибо .
dasvex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С. Вывод символьного массива - результат удручающе не понятен Алексей Денисов Помощь студентам 5 05.07.2011 10:30
Возникает ошибка при выделении памяти для элемента типа TStringList динамического массива записей. Вадим Мошев Общие вопросы Delphi 5 28.05.2011 10:48
BLOCK_TYPE_IS_VALID(pHead->nBlockUse) mansp Общие вопросы C/C++ 4 07.04.2011 17:56
Удаление элемента из символьного массива Mixim Visual C++ 4 03.12.2010 16:38
Обработка массива ячеек в памяти Alex Pancho Microsoft Office Excel 4 30.05.2009 20:21