class cls1
{
float f[20];
};
class cls2
{
cls1* _cls1;
double ff[5];
};
class cls3
{
cls2* _cls2;
long l[50];
};
void main()
{
unsigned int s1 = 5, s2 = 10, s3 = 15, i, j;
cls3* cls = new cls3[s1];
for (i = 0; i < s1; i++)
cls._cls2 = new cls2[s2];
for (i = 0; i < s1; i++)
for (j = 0; j < s2; j++)
cls._cls2[j]._cls1 = new cls1[s3];
}
Ошибка расшир. дин. массива
Код:
Теперь мне надо добавить ещё один элемент в основной массив - cls. Я считаю занимаемую память всем массивом(sizeof(тип)*кол-во эл-ов), затем считаю память, которая будет заниматься новым элементом и складываю их, указывая во втором параметре функции realloc(). Мне сообщается:
Цитата:
Unhandled exception at 0x77f767cd in loadup.exe: User breakpoint
И выбрасывает меня в dbgheap.cpp. Там _ASSERT срабатывает. Пробовал компилить и в релизе...пишет: "В приложении была обнаружена ошибка и оно будет закрыто. Отправить отчёт об ошибке?"
Цитата:
Originally posted by [ss]3L33T@
Теперь мне надо добавить ещё один элемент в основной массив - cls. Я считаю занимаемую память всем массивом(sizeof(тип)*кол-во эл-ов), затем считаю память, которая будет заниматься новым элементом и складываю их, указывая во втором параметре функции realloc(). Мне сообщается:
И выбрасывает меня в dbgheap.cpp. Там _ASSERT срабатывает. Пробовал компилить и в релизе...пишет: "В приложении была обнаружена ошибка и оно будет закрыто. Отправить отчёт об ошибке?"
Код:
class cls1
{
float f[20];
};
class cls2
{
cls1* _cls1;
double ff[5];
};
class cls3
{
cls2* _cls2;
long l[50];
};
void main()
{
unsigned int s1 = 5, s2 = 10, s3 = 15, i, j;
cls3* cls = new cls3[s1];
for (i = 0; i < s1; i++)
cls._cls2 = new cls2[s2];
for (i = 0; i < s1; i++)
for (j = 0; j < s2; j++)
cls._cls2[j]._cls1 = new cls1[s3];
}
{
float f[20];
};
class cls2
{
cls1* _cls1;
double ff[5];
};
class cls3
{
cls2* _cls2;
long l[50];
};
void main()
{
unsigned int s1 = 5, s2 = 10, s3 = 15, i, j;
cls3* cls = new cls3[s1];
for (i = 0; i < s1; i++)
cls._cls2 = new cls2[s2];
for (i = 0; i < s1; i++)
for (j = 0; j < s2; j++)
cls._cls2[j]._cls1 = new cls1[s3];
}
Теперь мне надо добавить ещё один элемент в основной массив - cls. Я считаю занимаемую память всем массивом(sizeof(тип)*кол-во эл-ов), затем считаю память, которая будет заниматься новым элементом и складываю их, указывая во втором параметре функции realloc(). Мне сообщается:
И выбрасывает меня в dbgheap.cpp. Там _ASSERT срабатывает. Пробовал компилить и в релизе...пишет: "В приложении была обнаружена ошибка и оно будет закрыто. Отправить отчёт об ошибке?"
Создай с помощью new новый массив туда скопируй то, что тебе надо. А Старый массив удали delete'ом.
Цитата:
Originally posted by lord Kelvin
Создай с помощью new новый массив туда скопируй то, что тебе надо. А Старый массив удали delete'ом.
Создай с помощью new новый массив туда скопируй то, что тебе надо. А Старый массив удали delete'ом.
А еси черезе realloc()? А то как-то не хочется лишнее место забивать
Цитата:
Originally posted by [ss]3L33T@
А еси черезе realloc()? А то как-то не хочется лишнее место забивать
А еси черезе realloc()? А то как-то не хочется лишнее место забивать
Код:
#include<stdio.h>
#include<alloc.h>
#include<string.h>
int main(void)
{
char *str;
str = (char *) malloc(10);
strcpy(str, "Hello");
printf("String is %s\n Address is %p\n", str, str);
str = (char *) realloc(str, 20);
printf("String is %s\n New address is %p\n", str, str);
free(str);
return 0;
}
#include<alloc.h>
#include<string.h>
int main(void)
{
char *str;
str = (char *) malloc(10);
strcpy(str, "Hello");
printf("String is %s\n Address is %p\n", str, str);
str = (char *) realloc(str, 20);
printf("String is %s\n New address is %p\n", str, str);
free(str);
return 0;
}
Этот код из хелпа к BC3.1. Запускаем...
Код:
String is Hello
Address is 1B68
String is Hello
New address is 1B76
Address is 1B68
String is Hello
New address is 1B76
Вуаля! Адрес строки поменялся! Значит... Значит новая строка была целиком выделена в памяти, а старая удалена. То есть "лишнее место" все равно забивается. Хотя и в том и в другом случае не на долго.
Цитата:
Originally posted by [ss]3L33T@
Теперь мне надо добавить ещё один элемент в основной массив - cls. Я считаю занимаемую память всем массивом(sizeof(тип)*кол-во эл-ов), затем считаю память, которая будет заниматься новым элементом и складываю их, указывая во втором параметре функции realloc(). Мне сообщается:
Теперь мне надо добавить ещё один элемент в основной массив - cls. Я считаю занимаемую память всем массивом(sizeof(тип)*кол-во эл-ов), затем считаю память, которая будет заниматься новым элементом и складываю их, указывая во втором параметре функции realloc(). Мне сообщается:
Собственно, на вопрос тебе уже ответили.
Обычно в подобных случаях память выделяют с запасом, чтоб при добавлении одного элемента не нужно было ворошить всё.
P.S. А чем тебе вектор не подошел?