Bir dosya sistemi oluşturmaya çalışıyorum ve dosya tanıtıcılarını belirtmem gerekiyor.Callocking memory
ı aşağıdaki tanımlarla iki yapıları var diyelim:
#define DESCRIPTOR_MAX (256)
#define TABLE_MAX (32)
typedef struct S16FS S16FS_t;
typedef struct {
bitmap_t *fd_status;
size_t fd_pos[DESCRIPTOR_MAX];
inode_ptr_t fd_inode[DESCRIPTOR_MAX];
} fd_table_t;
struct FS {
back_store_t *bs;
fd_table_t fd_table;
};
hiçbir sorun ile yeni bir dosya sistemi callocing ediyorum:
FS_t *fs = (FS_t *)calloc(8, sizeof(FS_t));
ama İçimdeki fd_table
calloc istediğimde benim sorunum arrises FS
yapı. İşte denediğim şey.
fs->fd_table = *(fd_table_t*)calloc(TABLE_MAX, sizeof(fd_table_t));
Ben uygunluk konusunda bir hata alıyorum: eğer
fs->fd_table.fd_pos = (size_t *)calloc(TABLE_MAX, sizeof(size_t));
error: array type 'size_t [256]' is not assignable
birisi bana açıklayabilir ne ben yapıyorum yanlış ya
Bu seferki hiç hata üretir Süreçte tamamen yanlış mıyım? fd_pos
'u bile işaretlemem gerekiyor mu?
Sadece * tahmin edelim * FS_t nedir? Ve Fyi, bir tahsisin sağ tarafına herhangi bir dereferanslı tahsisatın tek bir açıklamada eklenmesi, bir bellek sızıntısı için bir reçete. Bu: fs-> fd_table = * (fd_table_t *) calloc (TABLE_MAX, sizeof (fd_table_t)); 'hiçbir anlam ifade etmiyor ve bunu yaparken bellek sızdırıyor. – WhozCraig
oh bilirsin, bir yazım ekledim unuttum. Sorumu –
düzenleyeceğim. Hata üretmiyordu ama korkunç, korkunç bir şekilde yanlış hissettim. –