2013-02-12 48 views
-2

這裏是我的代碼分配內存,我不能使用libc的,但我不得不重新分配,並用C

char buf[1]; 
int count=0; 
while(Read(fileID, buf, 1)==1) 
{ 
     contents = (char *)realloc(contents,(iVal+1)*sizeof(char)); 
     contents[count]=buf[0]; 
     count++; 
} 

現在,我無法使用libc的,我會怎麼做重新分配。問題是我不知道我正在閱讀的文件的大小,所以我已經重新分配。 malloc也存在同樣的問題。

+1

如果你不使用'libc'你在用什麼?你的程序被編譯並被鏈接到__________? – 2013-02-12 16:02:47

+0

爲什麼你不能使用「libc」?當libc不可用時,「realloc」來自何處?這是哪個平臺? – Constantin 2013-02-12 16:05:08

+0

這是使用GCC的Linux X64,截至目前我正在使用LIBC,但無法再使用,因此我正在使用系統調用。鑑於這種限制,我不能使用realloc,爲什麼我在這裏尋求幫助 – user2065365 2013-02-12 16:08:55

回答

1

如果您沒有libc或其他具有內存管理功能的庫(malloc/realloc/free等價物),您必須編寫自己的內存管理器。 如果您正在爲Linux編寫內核模塊,您可能有權訪問kmalloc(9)kfree(9),甚至可能訪問krealloc。如果沒有,那麼你必須編寫你自己的內存管理功能。

0

lseek可以在讀取任何內容之前告訴你文件的大小,所以你不需要realloc()循環。 mmap()可以將它帶入內存,所以你不需要malloc()/ free()。

+0

lseek返回文件的長度?我需要給我的數組適當的大小... – user2065365 2013-02-12 16:54:24

+0

例如,如果文件有「嗨羅恩」,我需要它返回5這樣我的數組可以是大小,所以我可以複製文件的內容系統調用,這是我realloc的全部目的,所以我可以動態地做到這一點,首先指定大小 – user2065365 2013-02-12 16:56:40

+0

「info lseek」報告:「成功完成後,lseek返回由 否則,將返回(off_t)-1的值,並設置errno以指示錯誤。「 (顯然使用SEEK_END參數)。 – 2013-02-12 17:08:35

相關問題