Solved

2d array-pointer

Posted on 2006-10-30
8
3,657 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:Kdo
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
 
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
Is Your AD Toolbox Looking More Like a Toybox?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

 
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

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

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…
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of this video is to provide viewers with basic examples to understand how to create, access, and change arrays in the C programming language.

863 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

Need Help in Real-Time?

Connect with top rated Experts

28 Experts available now in Live!

Get 1:1 Help Now