> Создаю вот такие структуры: > 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 тебя спасёт.
Далее при старте приложеня инициирую их и выделяю под них память вот так:
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 тебя спасёт.