Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2014, 22:30   #1
undeadw
Новичок
Джуниор
 
Регистрация: 18.07.2014
Сообщений: 2
Восклицание Ошибка выделения памяти при использовании OpenMP в связке с ITK (Teamcenter API)

Среда Visual Studio 2008
Отладки как таковой нет, все производится "наживую" в консоле, из-за того что программа требует для запуска определенные параметры прописанные в bat'файле, а как запустить его( bat'файл) в процессе дебага в VS2008 я не обнаружил.
Teamcenter -ужасная система на джаве, с ужасным api, в чем суть проблемы -
1.Есть некая программа которая собирает данные из базы Teamcenter
2.Программа работает хоть и криво, но стабильно(хотя и долго)
3.Появилась надобность ускорить процесс(как вариант параллелизм)

Примечание 1: tag_t - внутренний тип itk api
Примечание 2: на картинках консоли я вывожу адреса переменных, ведь мне кажется проблема именно в них
Примечание 3: В считываемом файле лежат имя модели/ревизия вида - name/rev, они и считываются в структуру

Пример кода
Структура с именем и ревизией модели -
Код:
typedef struct massiv
{
char name[80];
char rev[5];
} mystruct;
Сам код функции -
Код:
int  readfile( char  path[256] )
{
int retcode = ITK_ok,numread=0,nr=0,size2=0;
char *value=NULL;
long strok=1;
char rev[5],name[80];
long size=0;
int g=0;
long int iteracii=0;
long int chislo=0;
char *temp=NULL,*temp1=NULL,flnameerr[80],flnameerrstd[80],flnamemab[80],flnamem[80],flname[80];
char seps[]   = "/\t\n";
char *next_token = NULL;
mystruct *arry= (mystruct *)malloc(sizeof(mystruct));
FILE *stream;
*buff=NULL, *buffstd=NULL,*bufferr=NULL,*bufferrstd=NULL;
tc_strcpy(flname,path);
temp1 = ITK_ask_cli_argument( "-file=" );
strcat(flname,temp1);
if( fopen_s( &stream, flname, "r" ) != 0 )
{printf( "The file %s was not opened\n" ,flname);return 0;}
else
{
fseek(stream,0,SEEK_END);
size=ftell(stream);
fseek(stream,0,0);
value = (char *) malloc(sizeof(char) * (size));
numread = fread(value,sizeof(char),size*1,stream);
for(nr=numread-1;nr<size;nr++)
value[nr]=0;
fclose(stream);
temp=strtok_s(value,seps,&next_token);
while(temp!=NULL)
{
if(strok%2==1)
{
if(strlen(temp)<=3) strok++;
strcat(name,temp);*rev=NULL;}
if(strok%2==0){
strcat(rev,temp);
if ((strlen(name)>3) && (strlen(rev)<3)){
strcpy(arry[iteracii].name,name);
strcpy(arry[iteracii].rev,rev);
//askitem(name,rev);
iteracii++;
arry = (mystruct *)realloc( arry,sizeof(mystruct)*(iteracii+1));
};
if ((strlen(name)<=3) || (strlen(rev)>=3)) {strcat(bufferr,name);
strcat(bufferr,":");
strcat(bufferr,rev);
strcat(bufferr,":");
strcat(bufferr,"Error with revision\n");
}
*rev=NULL;*name=NULL;}
strok++;
*temp=NULL;
temp = strtok_s( NULL, seps, &next_token);
}}
const char *attr_names1="item_id";
const char **attr_names= &attr_names1;
tag_t found_objs1[100];
tag_t *found_objs=found_objs1;
int hits=0;
omp_set_num_threads(4);
#pragma omp parallel  for private (found_objs,hits)
for (g=0;g<10;g++) //тест до 10 элементов
{
const char *attr_values1=arry[g].name;
const char **attr_values= &attr_values1;
printf("start %s %d %d %p %p\n",arry[g].name,g,hits,&hits,&found_objs);
ITK(ITEM_find_item_revs_by_key_attributes(1, attr_names, attr_values, arry[g].rev,&hits,&found_objs));
printf(" %d hits\n\n",hits);
}
return 0;
}
проблема возникает при
Код:
omp_set_num_threads(4);
когда количество потоков =1 , все работает, масса получается и все довольны (рисунок 1 - все работает)
при текущем варианте выдается ошибка связанная с памятью вида рисунок 5 + рисунок 4 и рисунок 2(не видно ошибки но прога упала)
На рисунке 3 программа каким-то чудом отработала, но все равно ничего не нашла(не верно отработала)

Описание функции из мануала
Код:
TCCORE_API int ITEM_find_items_by_key_attributes    (   int     num_attributes, 
        const char **   attribute_names, 
        const char **   attribute_values, 
        int *   n_items, 
        tag_t **    item_tags    
    )
This function searches the database for all Items and returns a list of item tags identified by the given attribute name/value pairs. The attributes must be the unique key attributes of the item class. Currently, only "item_id" attribute should be used.
Parameters: num_attributes (I) number of attributes
attribute_names (I) Attribute Names
attribute_values (I) Attribute Values
n_items (O) Number of matching Items found
item_tags (OF) n_items Array of tags of found Items

Функция Itk в заголовочном файле
Код:
extern TCCORE_API int ITEM_find_item_revs_by_key_attributes(
int num_attributes, /**< (I) number of attributes */
const char** attribute_names, /**< (I) Attribute Names */
const char** attribute_values, /**< (I) Attribute Values */
const char* rev_id, /**< (I) Revision ID */
int* n_items, /**< (O) Number of matching Items found */
tag_t** item_tags /**< (OF) n_items Array of tags of found Items */
);

Я так понимаю что проблема с памятью(с адресацией, хотя я и выделил переменные в private раздел, у кого есть идеи?
Изображения
Тип файла: jpg 1.jpg (78.4 Кб, 118 просмотров)
Тип файла: jpg 2.jpg (58.7 Кб, 128 просмотров)
Тип файла: jpg 3.jpg (74.1 Кб, 131 просмотров)
Тип файла: jpg 5.jpg (21.4 Кб, 130 просмотров)
undeadw вне форума Ответить с цитированием
Старый 27.07.2014, 18:17   #2
undeadw
Новичок
Джуниор
 
Регистрация: 18.07.2014
Сообщений: 2
По умолчанию

тема все еще актуальная, неужели нет даже предположений?
undeadw вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при использовании vfprintf в dll при stdout CHERTS Visual C++ 1 25.10.2013 15:18
Ошибка выделения памяти в классе строк, прошу помочь. Alessus Общие вопросы C/C++ 8 22.10.2011 13:45
Ошибка при использовании темплейта optimator Общие вопросы C/C++ 5 06.10.2011 14:44
Ошибка при использовании ICQClient Mihanches Работа с сетью в Delphi 2 04.10.2010 21:27
Утечка памяти при использовании DOM Ferrum26 Общие вопросы Delphi 4 13.08.2010 14:45