2016-03-21 6 views
-2

メモリに指定されたバイト数のメモリプールを割り当てようとしました。私がプログラムのテストを進めると、各メモリプールに対して1度に1バイトしか割り当てられませんでした。メモリに特定のバイト数を割り当てます。

typedef struct _POOL 
{ 
    int size; 
    void* memory; 

} Pool; 

Pool* allocatePool(int x); 
void freePool(Pool* pool); 
void store(Pool* pool, int offset, int size, void *object); 

int main() 
{ 

    printf("enter the number of bytes you want to allocate//>\n"); 
    int x; 
    int y; 
    Pool* p; 
    scanf("%d", &x); 
    printf("enter the number of bytes you want to allocate//>\n"); 
    scanf("%d", &x); 
    p=allocatePool(x,y); 
    return 0; 

} 



Pool* allocatePool(int x,int y) 
{ 
    static Pool p; 
    static Pool p2; 
    p.size = x; 
    p2.size=y; 
    p.memory = malloc(x); 
    p2.memory = malloc(y); 
    printf("%p\n", &p); 
    printf("%p\n", &p2); 
    return &p;//return the adress of the Pool 


} 
+0

@AnttiHaapala変数が 'static'として定義されていても? –

+1

ああ、ごめんなさい。それは正しいです。とにかく 'p2'へのallocは何ですか?それは確かに外部にアクセスすることはできません。 –

答えて

1

プールは、mainで宣言され、要求された量とともにallocatePoll関数に渡され、返されます。

#include <stdio.h> 
#include <stdlib.h> 

typedef struct _POOL 
{ 
    size_t size; 
    void* memory; 
} Pool; 

Pool allocatePool(Pool in, int x); 
Pool freePool(Pool in); 

int main() 
{ 
    size_t x = 0; 
    size_t y = 0; 
    Pool p = { 0, NULL}; 
    Pool p2 = { 0, NULL}; 

    printf("enter the number of bytes you want to allocate//>\n"); 
    scanf ("%zu", &x); 
    p=allocatePool(p,x); 
    printf("%p\n", p.memory); 
    printf("enter the number of bytes you want to allocate//>\n"); 
    scanf("%zu", &y); 
    p2=allocatePool(p2,y); 
    printf("%p\n", p2.memory); 

    p = freePool (p); 
    p2 = freePool (p2); 
    return 0; 
} 

Pool freePool(Pool in) 
{ 
    free (in.memory); 
    in.memory = NULL; 
    in.size = 0; 
    return in; 
} 

Pool allocatePool(Pool in,size_t amount) 
{ 
    in.size = amount; 
    if ((in.memory = malloc(amount)) == NULL && amount != 0) { 
     printf ("Could not allocate memory\n"); 
     in.size = 0; 
     return in; 
    } 
    printf("%p\n", in.memory); 
    return in;//return Pool 
} 
関連する問題