URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3678
[ Назад ]

Исходное сообщение
"Как отобразить двумерный массив в разделяемую память процесса ?"

Отправлено frank , 03-Дек-04 12:45 
Как отобразить двумерный массив в разделяемую память процесса ?

Содержание

Сообщения в этом обсуждении
"Как отобразить двумерный массив в разделяемую память процесс..."
Отправлено klalafuda , 03-Дек-04 12:59 
>Как отобразить двумерный массив в разделяемую память процесса ?

а в чем собственно проблемы с отображением? конкретнее please.

// wbr


"Как отобразить двумерный массив в разделяемую память процесс..."
Отправлено frank , 03-Дек-04 13:08 
>>Как отобразить двумерный массив в разделяемую память процесса ?
>
>а в чем собственно проблемы с отображением? конкретнее please.
>
>// wbr

у меня есть двумерный массив необходимо его отобразить в память(желательно средствами system V), привожу код прогу, необходимо как-то выделить память для каждой строки массива, (сейчас в данной проге segmentation fault)

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <errno.h>

int main()
{
int **array; //будущее двумерного массива
int shmid;

int new = 1;
char pathname[] = "1.c";
key_t key;

if((key = ftok(pathname,0)) < 0){
printf("Can\'t generate key\n");
exit(-1);
}

int i;

for(i=0;i<4;i++) {
    array[i][0] = malloc(sizeof(int*));
    }


if((shmid = shmget(key, 3*sizeof(int*), 0666|IPC_CREAT|IPC_EXCL))<0){

if(errno != EEXIST){


printf("Can\'t create shared memory\n");
exit(-1);
} else {


if((shmid = shmget(key, 3*sizeof(int*), 0)) < 0){
printf("Can\'t find shared memory\n");
exit(-1);
}
new = 0;
}
}

  
if((array = (int **)shmat(shmid, NULL, 0)) == (int **)(-1)){
printf("Can't attach shared memory\n");
exit(-1);
}


if(new){
array[0][0] = 1;
array[1][0] = 0;
array[2][0] = 1;
} else {
array[0][0] += 1;
array[2][0] += 1;
}


printf("%d,%d,%d" array[0], array[1], array[2]);

if(shmdt(array) < 0){
printf("Can't detach shared memory\n");
exit(-1);
}
return 0;
}


"Как отобразить двумерный массив в разделяемую память процесс..."
Отправлено frank , 03-Дек-04 13:21 
там блин в printf ошибка вкралась, но вопрос по память остается

"Как отобразить двумерный массив в разделяемую память процесс..."
Отправлено Murr , 03-Дек-04 15:33 

> for(i=0;i<4;i++) {
> array[i][0] = malloc(sizeof(int*));
>    }
>

array[i] указывает в молоко.

Как я понимаю, ты хотел сделать что-то вроде:
array = malloc(4*sizeof(int*));
for (i=0; i<4; i++)
    array[i] = malloc(4*sizeof(int));


"Как отобразить двумерный массив в разделяемую память процесс..."
Отправлено frank , 04-Дек-04 11:46 
благодарю