Question : 3d array with pointer to pointer.

J

Joonshik Kim

I was trying to define 3d array with pointer to pointer. I wrote like
following.

int ***d;
nx = 3;
ny = 5;
nz = 4;

d = (int ***)malloc((int) nx*sizeof(int **));
*d = (int **)malloc((int) nx*ny*sizeof(int*));
**d = (int *)malloc((int) nx*ny*nz*sizeof(int));
for(i = 1; i < nx ; i++) d = d[i-1] + ny;
for(i = 0; i < nx ; i++)
for(j = 1; j < ny ; j++) d[j] = d[j-1] + nz;


for(i=0 ; i < nx; i ++)
for(j = 0; j < ny; j++)
for(k = 0 ; k < nz; k++)
d[j][k] = 100*(i+1) + 10*(j+1) + k;


it compiled ok. but when I ran it, it shows error message like
"segementation fault.."

What did I do wrong ? can someone help me ?

thank you.
 
R

Richard Heathfield

Joonshik Kim said:
I was trying to define 3d array with pointer to pointer. I wrote like
following.

int ***d;
nx = 3;
ny = 5;
nz = 4;

d = malloc(nx * sizeof *d);
if(d == NULL) { HANDLE_THE_ERROR; }

for(i = 0; i < nx; i++)
{
d = malloc(ny * sizeof *d);
if(d == NULL) { CLEAN_UP; HANDLE_THE_ERROR; }

for(j = 0; j < ny; j++)
{
d[j] = malloc(nz * sizeof *d[j]);
if(d[j] == NULL) { CLEAN_UP; HANDLE_THE_ERROR; }
for(k = 0; k < nz; k++)
{
d[j][k] = 42;


--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: normal service will be restored as soon as possible. Please do not
adjust your email clients.
 
J

Joonshik Kim

Oh..Thank you..
It works nice..

Richard Heathfield said:
Joonshik Kim said:
I was trying to define 3d array with pointer to pointer. I wrote like
following.

int ***d;
nx = 3;
ny = 5;
nz = 4;

d = malloc(nx * sizeof *d);
if(d == NULL) { HANDLE_THE_ERROR; }

for(i = 0; i < nx; i++)
{
d = malloc(ny * sizeof *d);
if(d == NULL) { CLEAN_UP; HANDLE_THE_ERROR; }

for(j = 0; j < ny; j++)
{
d[j] = malloc(nz * sizeof *d[j]);
if(d[j] == NULL) { CLEAN_UP; HANDLE_THE_ERROR; }
for(k = 0; k < nz; k++)
{
d[j][k] = 42;


--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: normal service will be restored as soon as possible. Please do not
adjust your email clients.
 
P

plodger

Richard Heathfield wrote:
[snip]
--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: normal service will be restored as soon as possible. Please do not
adjust your email clients.

Hi Richard, it's Sarah Thompson here. I've been trying to contact you
urgently, but haven't succeeded through usual channels, so many
apologies for posting here but I am not aware of any alternative.

You need to contact your brother Robert urgently in connection with a
family matter. Feel free to email me directly and I'll fill you in on
the details.

Best regards,
Sarah (thompson a t email dt arc dt nasa d t gov)
 
M

mark_bluemel

Joonshik said:
I was trying to define 3d array with pointer to pointer. I wrote like
following.

int ***d;
nx = 3;
ny = 5;
nz = 4;

d = (int ***)malloc((int) nx*sizeof(int **));

You store one address into d.
*d = (int **)malloc((int) nx*ny*sizeof(int*));

You store one address at *d.
**d = (int *)malloc((int) nx*ny*nz*sizeof(int));

You store one address at **d.
for(i = 1; i < nx ; i++) d = d[i-1] + ny;
for(i = 0; i < nx ; i++)
for(j = 1; j < ny ; j++) d[j] = d[j-1] + nz;


You now try to access 60 addresses. What is wrong with this picture?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,011
Latest member
AjaUqq1950

Latest Threads

Top