LINUX.ORG.RU

Помогите с realloc()


0

0

нужен массив double**, динамически расширяющийся. делаю: double **Xr;

int size=0; //размер массива

for (j=0; j<n; j++)

{

if (size==0)

{

Xr = (double **) malloc (sizeof(double *)); //выделяю память под указатель

Xr[0] = (double *) malloc (vars_amount*sizeof(double)); //Память под значения

}

else

{

Xr = (double **)

realloc (Xr, sizeof(double*) * (size+1));

Xr[size] = (double *) malloc (sizeof(double)*vars_amount);

}

...

size++;

}

при установке MALLOC_CHECK_=1 выдается Xr addr-invalid pointer! что я делаю не так?

anonymous

Ответ на: комментарий от anonymous

это у меня массив указателей на массивы double. данные появляются постепенно, соответственно и массив расширять надо. Xr ------------------ | 0 | 1 | ...| ------------------ | v ------- | 98 | ------- | 55.5| -------

только вот все равно не понял, почему Xr[0]. ведь Xr должен расширяться на размер одного указателя (4 байта), а у тебя расширяется только нулевой элемент Xr на этот самый размер. или я чего не понял?

anonymous
()

а, черт, псевдографика вся сбилась, сорри

anonymous
()

Странно, у меня выделенеие работает нормально, может проблема в том что когда его пользуешь выходишь за пределы?

anonymous
()
Ответ на: комментарий от anonymous

я так понимаю, что вылезание за пределы - это как следствие неправильного перевыделения. кстати, после первого раза обращение к перевыделенной области работает нормально. когда же realloc вызывается второй раз, получается корка. ты, кстати, переменную MALLOC_CHECK_ определял? не ругается?

anonymous
()

А не проще ли воспользоватся стандартными контейнерами из STL?
Что то типа vector <vector<double> >?
Или нормальные герои всегда идут в обход ;-)

anonymous
()

я под MSVC собрал. А вобщем то полезнее и лучше придумать решение со стандартными компонентами.

anonymous
()
Ответ на: комментарий от anonymous

А не проще ли воспользоватся стандартными контейнерами из STL? Что то типа vector <vector<double> >? Или нормальные герои всегда идут в обход ;-)

отвечаю. я - чайник в программировании, это несколько в стороне от моего основного русла деятельности. потому применяю то, что в институте вложили. увы, вложили немного. что такое STL для меня вообще загадка. буду весьма признателен, если поможете работающим примером на указанную тему. а то я на эту в общем-то ерунду убил уже две недели. хелп!

anonymous
()

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

по поводу STL(Standart Template Library) это библиотека шаблонов для
C++, там есть контейнер vector, пример:

#include <vector>
using std::vector;
int main(void) {
vector<vector<double> > x;

for(i=0;i<10;i++){
x.resize(i+1);
x[i].resize(1000);
}
}

примерно так, подробности --- в любой свежей книжке по С++, имхо
лучше всего Страуструп, третье издание.

HTH

anonymous
()
Ответ на: комментарий от anonymous

Greate thanx! В смысле спасибо большое

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.