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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2011, 12:34   #1
metoflex
Пользователь
 
Регистрация: 21.06.2009
Сообщений: 37
Вопрос Работа с памятью. Вопрос на засыпку.

У меня в одном *.cpp есть объявление структуры и обращение к ее полям:

class1.h:

Код:
		
struct NodeData
{
    unsigned short** doublemass;
    char* simbols;
};



class1.cpp:

Код:
		
NodeData* data;
data = new (NodeData);
pointfunctionanotherclass->function_class2(pathimg, dataimg->pixelmass, dataimg->sizeimg);
Код:
		
function_class2(///Param///)
{

           simbols= ...  //выделяю память
           doublemass =...//выделяю память

           simbols[0]=1;
           simbols[1]=1;
           doublemass[2][2]=1;            
}
А вот теперь и сам вопрос на засыпку:

почему при выходе из function_class2 (отработала она корректно и все абсолютно значения записались именно так как и следовало и соответственно память выделяется корректено) в

class1.cpp: Все поля структуры пустые, т.е. такое ощущение, что после выхода из ф-ии где мы выделяли память прога ее успешно почистила (принудительной очистки памяти я не делаю вообще).

Если же я память выделяю в class1.cpp, то после того, как отрабатывает ф-ия function_class2, то в class1.cpp я уже наблюдаю абсолютно заполненную структуру именно так как мне и нужно, но неприятность заключается вся в том, что получаются перекрестные обращения тогда между классами, что не гут, потому хотелось бы выделять память именно в function_class2, но при этом в class1.cpp иметь уже готовую структуру (с заполненными полями), после отработки function_class2.

Как это можно реализовать и почему не проходит испытания первый способ?
metoflex вне форума Ответить с цитированием
Старый 18.07.2011, 12:49   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

А там как в функцию параметры передаются? Весь код функции нужен.

А хотя, я на 100% уверен, что передаются так: unsigned short ** doublemass, char * symbols.
В функции вы оперируете с копией этих указателей, а затем при выходе копии уничтожаются, оставляя вам переданные параметры, т.е. NULL и ещё память утекает в функции.
Решение: unsigned short **& doublemass, char *& symbols

Последний раз редактировалось Carbon; 18.07.2011 в 12:53.
Carbon вне форума Ответить с цитированием
Старый 18.07.2011, 12:54   #3
metoflex
Пользователь
 
Регистрация: 21.06.2009
Сообщений: 37
По умолчанию

Вот весь код:

Цитата:
Сообщение от Carbon Посмотреть сообщение
А там как в функцию параметры передаются? Весь код функции нужен.
В первом классе:

class1.h

Код:
struct NodeData
{
	unsigned short** pixelmass;
	char* sizeimg;
};
class1.cpp

Код:
NodeData* dataimg;
dataimg = new (NodeData);
		
pConvertImage->ConversionPixelMassTo16Bits(pathimg, dataimg->pixelmass, dataimg->sizeimg);

В другом классе:

Код:
void CImageConverter::ConversionPixelMassTo16Bits(CString path, unsigned short **pixelmass, char* sizeimg)		
{
	COLORREF RGB888=0;
	int r=0,g=0,b=0;
	int RGB565=0;

	CImage image;
	image.Load(path);
           dataimg->sizeimg = new char [2];
	sizeimg[width]=image.GetWidth();
	sizeimg[height]=image.GetHeight();
		
	pixelmass = new unsigned short* [sizeimg[width]];		
	for(int i=0; i<=sizeimg[width]; i++) pixelmass[i] = new unsigned short [sizeimg[height]];

	for(int j=0; j<sizeimg[height]; j++)
	{
		for(int i=0; i<sizeimg[width]; i++)
		{
			RGB888=image.GetPixel(i,j);
			//ASSERT(RGB888!=CLR_INVALID);
			r=(RGB888<<24)>>24;
			g=(RGB888<<16)>>24;
			b=(RGB888<<8)>>24;

			RGB565 = (b >> 3) | ((g >> 2) << 5) | ((r >> 3) << 11);
			
			pixelmass[i][j]=(unsigned short)RGB565; // unsigned
		}
	}	
}
metoflex вне форума Ответить с цитированием
Старый 18.07.2011, 13:03   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Ну чё, помогло?
Carbon вне форума Ответить с цитированием
Старый 18.07.2011, 13:08   #5
metoflex
Пользователь
 
Регистрация: 21.06.2009
Сообщений: 37
По умолчанию

Всё! Спасибо Огромное! Профиксилось
metoflex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос на засыпку по show columns smoke888 SQL, базы данных 5 17.09.2012 12:46
вопрос на засыпку...... Rukata Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 19.09.2009 23:39
Вопрос на засыпку BuT@JL Помощь студентам 6 08.03.2009 12:56
Вопрос на засыпку по квантовой физике. Kostia Помощь студентам 5 26.10.2008 00:20