Προς το περιεχόμενο

Malloc


Firetrooper

Προτεινόμενες αναρτήσεις

Δημοσ.
ΑΑ και κατι τελευταιο!! η χρηση της malloc διαφερει καθολου στους δισδιαστατους πινακες?

 

Παραθέτω από παλαιότερο post μου, ελπίζω να βοηθήσει:

 

Τσούκου. realloc μπορείς να κάνεις και σε απλό δείκτη. Ένας διπλός δείκτης είναι απλά δείκτης προς έναν άλλον, απλό δείκτη. Αυτό, σε συνδυασμό με δυναμική δέσμευση μνήμης, σου επιτρέπει να εξομοιώνεις τη δημιουργία δυναμικών δισδιάστατων πινάκων, που θα μπορούσαν κάλλιστα να είναι και μη ορθογώνιοι. Π.χ ένας πίνακας Α[][]:

┌─┐

├─┼─┐

├─┼─┼─┐

└─┴─┴─┘

Ένας «πίνακας» 3 γραμμών με μεταβλητό αριθμό στηλών ανά γραμμή. Για να καταλάβεις πώς γίνεται αυτό, δες σχηματικά τα παρακάτω:

 

>int **A;

Δεσμεύει μία θέση μνήμης, της οποίας το περιεχόμενο πρέπει να είναι η διεύθυνση μνήμης ενός άλλου δείκτη:

>
┌─┐
└─┘

 

 

>A = (int**) malloc(3 * sizeof(int));

Δεσμεύει 3 συνεχόμενες θέσεις μνήμης, στην πρώτη από τις οποίες δείχνει ο A. Κάθε μία θέση αποτελεί ξεχωριστό δείκτη σε ακέραιο, οπότε μπορεί να αποθηκευθεί ως τιμή της η διεύθυνση μνήμης μίας μεταβλητής int:

>
┌─┐
└─┘
│
▼
┌─┐
│ │
├─┤
│ │
├─┤
│ │
└─┘

 

 

>Α[0] = (int*) malloc(sizeof(int));
Α[1] = (int*) malloc(2 * sizeof(int));
Α[2] = (int*) malloc(3 * sizeof(int));

Δεσμεύει αντίστοιχα 1, 2 και 3 συνεχόμενες θέσεις μνήμης, που στην πρώτη από καθεμιά τους δείχνουν οι προηγούμενοι 3 δείκτες:

>
┌─┐
└─┘
│
▼
┌─┐   ┌─┐
│ │──►└─┘
├─┤   ┌─┬─┐
│ │──►└─┴─┘
├─┤   ┌─┬─┬─┐
│ │──►└─┴─┴─┘
└─┘

 

Σκίστηκα λίγο να το βγάλω με ASCII art, αλλά πιστεύω ότι είναι αρκετά παραστατικό και θα σε βοηθήσει...

Δημοσ.

Τα λεει πολυ ωραια εδω

Allocate memory block

 

Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.

 

δηλαδη ολα τα παρακατω ειναι σωστα.

>// sdfsdf.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>
struct foo
{
int a;
int b;
int c;
int e;
};
struct fee
{
char a,z,x,y;
double b;
};
int _tmain(int argc, _TCHAR* argv[])
{
int *intPtr=NULL;
int **intPtr2=NULL;
int ***intPtr3=NULL;
foo *fooPtr=NULL;
fee *feePtr=NULL;

intPtr =(int*) malloc(16);
intPtr2 =(int**)malloc(16);
intPtr3 =(int***)malloc(16);
   fooPtr=(foo*)malloc(16);
feePtr =(fee*)malloc(16);

  

feePtr->a='e';
fooPtr->a=123;

printf("foo:%d   fee:%c",fooPtr->a,feePtr->a);
getchar();
return 0;
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...