Перейти к содержанию

Треба помощь!!!!!!!


Гость

Рекомендуемые сообщения

Короче так. В хэдере объявлена структура, в которой имеется 4 поля: 3 целых числа и один указатель на действительное (типа массив будет из даблов).

typedef struct{

INT4 p1;

INT4 p2;

INT4 p3;

DOUBLE *coor;

} NM, *pNM;

Не смотрите на то, что типы написаны большими буквами - это макросы.

Далее делаем статическую переменную типа этой структуры.

static NM newS;

После этого присваиваем newS.coor = NULL; и заново аллоцируем массив размером р1*р2*р3 (типа realloc).

После этого в одной из процедур обработки этой структуры (передается указатель на нее) происходит следующее: имеется 3 вложенных цикла до р1, р2 и р3 соответственно. Внутри самого глубокого цикла происходит хитрое обращение к массиву:

for(i=0; i

for(j=0; j

for (k=0; k

pnewS->coor[(i*p2 + j)*p3 + k] = 0; //ноль - для примера

}

}

}

Так вот тут-то и начинается самое интересное - выдает такое Segmentation fault.

Я пробовал выносить вычисление индекса в отдельную переменную и она все равно ругается. Если же написать просто число (например, 0 или 1), то все ок. Указатель не НУЛЛ. Аллоцируется вроде нормально, иначе указатель бы был нулл. Чего делать не могу понять - я такого ни разу не видел. Причем, косячит именно эта строка - если ее закомментарить, то все ок. НИД ХЕЛП!

Ссылка на комментарий
Поделиться на другие сайты

typedef struct{

int p1;

int p2;

int p3;

double *coor;

} NM, *pNM;

static NM newS;

static int p1 = 2;

static int p2 = 2;

static int p3 = 2;

int proc ( pNM pnewS )

{

int i,j,k;

for ( i = 0; i < p1; i++ )

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

for ( k = 0; k < p3; k++ )

pnewS->coor[(i*p2 + j)*p3 + k] = 0;

return 0;

}

int main ( void )

{

newS.coor = 0;

newS.coor = ( double* ) malloc ( p1 * p2 * p3 );

proc ( &newS );

free ( newS.coor );

return 0;

}

Вот этот код отработал на ура.Можь я тя не правильно понял..

А вообще сегфолты обычно вылетают при некорректной работе с памятью...Что за макросы у тя в структе ? И желательно какой точный код проги..Удачи!

> Короче так. В хэдере объявлена структура, в которой имеется 4

> поля: 3 целых числа и один указатель на действительное (типа

> массив будет из даблов).

> typedef struct{

> INT4 p1;

> INT4 p2;

> INT4 p3;

> DOUBLE *coor;

> } NM, *pNM;

> Не смотрите на то, что типы написаны большими буквами - это

> макросы.

> Далее делаем статическую переменную типа этой структуры.

>

> static NM newS;

>

> После этого присваиваем newS.coor = NULL; и заново аллоцируем

> массив размером р1*р2*р3 (типа realloc).

>

> После этого в одной из процедур обработки этой структуры

> (передается указатель на нее) происходит следующее: имеется 3

> вложенных цикла до р1, р2 и р3 соответственно. Внутри самого

> глубокого цикла происходит хитрое обращение к массиву:

>

> for(i=0; i

> for(j=0; j

> for (k=0; k

> pnewS->coor[(i*p2 + j)*p3 + k] = 0; //ноль - для примера

> }

> }

> }

>

> Так вот тут-то и начинается самое интересное - выдает такое

> Segmentation fault.

>

> Я пробовал выносить вычисление индекса в отдельную переменную

> и она все равно ругается. Если же написать просто число

> (например, 0 или 1), то все ок. Указатель не НУЛЛ.

> Аллоцируется вроде нормально, иначе указатель бы был нулл.

> Чего делать не могу понять - я такого ни разу не видел.

> Причем, косячит именно эта строка - если ее закомментарить,

> то все ок. НИД ХЕЛП!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...