Solved

2d array-pointer

Posted on 2006-10-30
8
3,659 Views
Last Modified: 2008-06-06
double **p;

.. ... .

... . ..


p= (double *) malloc(sizeof(double) * ( m*n)) ;
... ..

for ( i .... .. .
     for ( j ......

            *(*(p+i)+j)++;
}
}



it is not working because of molloc operation. i try to do, sorted numbers which lenght is m*n... like array[m][n]..
0
Comment
Question by:thefirstfbli
8 Comments
 
LVL 45

Expert Comment

by:Kent Olsen
ID: 17837541
Hi thefirstfbli,

You don't need to do a double dereference here.  The structure that you're trying to create is a table of doubles, NOT a table of pointers to doubles.

Just define the structure as "double *p" and don't get caught up in the double dereferencing.



Good Luck,
Kent
0
 
LVL 1

Author Comment

by:thefirstfbli
ID: 17837702
ok but

for ( i=0;i<n;i++)
 for(j=0;i<m;j++)
{
  but in this line ;

    *(*(p+i)+j)++;
}

it gives error..

i did this like

arr[100][100];

for ( i
    for ( j
        a[i][j]=inc;
inc++;

but it is not dynamic..  because i dont know the n and m values .. it comes from somewhere..
0
 
LVL 1

Author Comment

by:thefirstfbli
ID: 17837732
" invalid type argument of unary * "  is the fault for the line *(*(p+i)+j);

above, there is no ++ after it..
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 84

Assisted Solution

by:ozo
ozo earned 100 total points
ID: 17838683
p= (double **) malloc(sizeof(double*) * n) ;
for( i=0;i<n;i++ ){
   *(p+i) = (double *)malloc( sizeof(double)*m);
}
for ( i=0;i<n;i++ ){
 for( j=0;j<m;j++ ){
    (*(*(p+i)+j))++;
  }
}
0
 
LVL 3

Expert Comment

by:benjami
ID: 17844276
Shouldn't it be
*(*(p+sizeof(double)*i)+sizeof(double)*j)++;
0
 
LVL 7

Expert Comment

by:aib_42
ID: 17847180
>Shouldn't it be
>*(*(p+sizeof(double)*i)+sizeof(double)*j)++;

Pointers are set up such that (p+1) will always point to the next element after (p). "p++" or "p+1" will increase the pointer's value by the sizeof the element it's pointing to.
0
 
LVL 1

Accepted Solution

by:
Ashwini_pandey earned 300 total points
ID: 17904400

.malloc is fine it will allocate required memory
.problem was the statement
  *(*(p+i)+j)++;
 here you are assuming that (p+i) will point to next row of the array which is incorrect.
Here p is **double.

To solve the problem you should declare p correctly this piece of code will solve your problem.

double (*p)[N];//pointer to array of N double data type

 p = (double (*)[N]) malloc(sizeof(double)*M*N);//type cast malloc correctly.



0
 
LVL 22

Assisted Solution

by:NovaDenizen
NovaDenizen earned 100 total points
ID: 17916617
If you're doing one malloc, you're allocating one array.  So, all references have to be in the same array.

If you say double*p = malloc(sizeof(double)*M*N), then you have to refer to elements like p[i*N + j], assuming M is height, N is width,  i is the row and j is the column.
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ou…
This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question