информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяЗа кого нас держат?Spanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 ФБР нашла русский след в атаках... 
 Массовый взлом SharePoint 
 Microsoft Authenticator прекращает... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Проблема с динамическим масивом AnsiString-ов 20.08.02 07:54  
Автор: Yuri Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Создаю вот такие структуры:
struct sDim1
{
short Type;
AnsiString Name;
};

struct sDim2
{
AnsiString Pole1;
AnsiString Pole2;
sDim1 * Forma;
};

Далее при старте приложеня инициирую их и выделяю под них память вот так:
sDim2 *myData = new sDim2;
myData = ( sDim2* ) malloc( sizeof( sDim2 ) * 5 ); //выделяю место под масив из 5-ти элементов (структур)
myData->Forma=( sDim1* ) malloc( sizeof( sDim1) * 2 );

и теперь при попытке что-то записать в эти структуры прога вываливается с ошибкой что я полез не в ту память, будто ее и не выделяли.
пишу вот так.
myData[0].Pole1="aaaaaa";
myData[0].Pole2="aaaaaa";
myData[0].Forma[0]="aaaaaa";
myData[0].Forma[1]="aaaaaa";
...

По окончании прграммы освобождаю память
freee(myData);

Что я делаю неправильно? Я знаю что AnsiString это только указатель но неужели надо выделять память для каждого самостоятельно?
Хотя когда я делаю масив статическим то все почемуто работает нормально...
Подскажите плиз как решить эту прблему.
[C++] Проблема с динамическим масивом AnsiString-ов 20.08.02 11:40  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка>
#include <afx.h>

CString* a;

void main()
{
#ifdefWRONG	a = (CString*)malloc( sizeof(CString) );
#else
	a = new CString;
#endif	
	*a = "aaa";
}

---

В предыдущем ответе есть неточность. Смешивать new и malloc можно.
Но, никогда не инициализируй указатели на классы, указатели на структуры содержащие классы ф-ей malloc().
[C++] Проблема с динамическим масивом AnsiString-ов 21.08.02 01:10  
Автор: Biasha <Бяша> Статус: Member
Отредактировано 21.08.02 01:13  Количество правок: 2
<"чистая" ссылка>
> В предыдущем ответе есть неточность. Смешивать new и malloc
> можно.

Я имел в виду, что не стоит сначала выделять память new, а потом, для этой де переменной, malloc :)
У тебя тоже неточность :) После таких слов можно пойти и написать нечто типа int *a = new int[5]; free(a);

> Но, никогда не инициализируй указатели на классы, указатели
> на структуры содержащие классы ф-ей malloc().

Если хотя бы один из этих классов содержит конструктор или деструктор.
[C++] Проблема с динамическим масивом AnsiString-ов 20.08.02 08:29  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
> Создаю вот такие структуры:
> struct sDim1
> {
> short Type;
> AnsiString Name;
> };
>
> struct sDim2
> {
> AnsiString Pole1;
> AnsiString Pole2;
> sDim1 * Forma;
> };
>
> Далее при старте приложеня инициирую их и выделяю под них
> память вот так:
> sDim2 *myData = new sDim2;

Так ты new будешь пользоваться или malloc?
Выбери одно из двух. Лучше new. И тогда уж new sDim2[5].

> myData = ( sDim2* ) malloc( sizeof( sDim2 ) * 5 );
> //выделяю место под масив из 5-ти элементов (структур)
> myData->Forma=( sDim1* ) malloc( sizeof( sDim1) * 2
> );
>
> и теперь при попытке что-то записать в эти структуры прога
> вываливается с ошибкой что я полез не в ту память, будто ее
> и не выделяли.
> пишу вот так.
> myData[0].Pole1="aaaaaa";
> myData[0].Pole2="aaaaaa";
> myData[0].Forma[0]="aaaaaa";
> myData[0].Forma[1]="aaaaaa";
> ...
>
> По окончании прграммы освобождаю память
> freee(myData);

Лучше deleteee и не забыть про Forma

> Что я делаю неправильно? Я знаю что AnsiString это только
> указатель но неужели надо выделять память для каждого
> самостоятельно?

А почему бы и нет? Ведь "Я знаю что AnsiString это только указатель"

> Хотя когда я делаю масив статическим то все почемуто
> работает нормально...

Значит, выделяя память с помощью new всё будет работать - он рекурсивно вызывается для полей.

> Подскажите плиз как решить эту прблему.

А вообще, я не знаю, что такое AnsiString. Это из ".NET Framework Class Library" или из Borland?
Думаю new тебя спасёт.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach