線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1128
推到 Plurk!
推到 Facebook!

malloc()配置問題

尚未結案
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-18 01:34:50 IP:59.104.xxx.xxx 未訂閱
#include 
#include 
#include     using namespace std;        int main()
{
    int i=10;
    char *ID=(char *)malloc(i*sizeof(char));
    
    scanf("%s",&ID);
    printf("%s",ID);
       
    
    system("pause");
    return 0;    }    
我這樣是哪邊有問題~~ 看起來是ok@@ 謝謝
psl
一般會員


發表:6
回覆:30
積分:7
註冊:2003-06-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-18 11:11:50 IP:220.143.xxx.xxx 未訂閱
syao 你好    
         
#include 
#include     
#include     <-- 這兩行是 Cpp 的東西
using namespace std;   <-- 你的 c 程式其實用不到        int main()
{
    int i=10;
    char *ID=(char *)malloc(i*sizeof(char));
    
    scanf("%s", &ID);
    printf("%s",ID);
  
    system("pause");
    return 0;
}
紅色的地方拿掉就可以了 char *ID = .... 所以 ID 的型態就是 char*, 不用再取址了 < > 關於指標剛開始都會有點搞不清楚 所以寫程式時後要注意 並多花點時間想想 慢慢的就會有感覺了 < >
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-18 13:21:20 IP:203.70.xxx.xxx 未訂閱
psl感謝你~~    int i=10; char *ID=(char *)malloc(i*sizeof(char)); 我把上面兩行拿掉也是可以剩下malloc(sizeof(char)); malloc(拿掉後這裡面不是只是char一個位元組大小??為什麼可以配置給字串使用) 還有malloc(100);//如果是這樣寫這是什麼意思??是給初始值嗎?? 如果是給初始值那算是配置多少size??? 發表人 - syao 於 2005/07/18 13:22:38
psl
一般會員


發表:6
回覆:30
積分:7
註冊:2003-06-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-18 14:25:36 IP:220.129.xxx.xxx 未訂閱
syao 你好:    你的第一個問題算是定義問題吧 "只有一個元素的陣列" 叫不叫陣列? 還是要兩個以上呢? 我覺得應該都可以  看你怎麼想囉     第二個問題 我覺得是配置 n bytes 所以 malloc(100) 應該是配置 100 Bytes 想想看 如果我寫 malloc(sizeof(int)*10) 因為 sizeof(int) = 4  佔 4 Bytes 4*10 等於 40  所以會配置 40 Bytes  剛好是可以放 10 個 int ...對吧    這從下面的程式碼可以看出來
Unit1.c.8: int *ip1 = malloc(2);
0040120D 6A02             push 0x02
0040120F E8D0040000       call malloc(unsigned int)
00401214 59               pop ecx
00401215 8945F8           mov [ebp-0x08],eax
Unit1.c.10: int *ip2 = malloc(sizeof(int)*2);
00401218 6A08             push 0x08
0040121A E8C5040000       call malloc(unsigned int)
0040121F 59               pop ecx
00401220 8945F4           mov [ebp-0x0c],eax
忘了說很重要的一點 動態配置的記憶體用完後要記得釋放掉 不然會有 memory leak 有借有還 發表人 -
syao
初階會員


發表:66
回覆:63
積分:25
註冊:2005-02-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-18 18:56:20 IP:203.70.xxx.xxx 未訂閱
#include 
#include     struct A
{
    char *name;       
       
}*student[10]; //用結構定義10個人資料    int main()
{        student[10]=(A*)malloc(10*sizeof(A));
    
    scanf("%s",student[0]->name);
    printf("%s",student[0]->name);
    system("pause");
    return 0;
}    
不過編譯出來好像有錯~~不知道是哪錯? 還有free()怎麼使用以這題為例的話? 1.char *name[10]; //是指標陣列10個元素每個元素資料型態都屬於char *這樣解釋對嗎??? 還有他算是有效記體體位置嗎??如果它是結構裡面資料成員要用malloc配置記憶體嗎? 2.(char*) name[10];//這樣變成陣列指標,指向含有10個char元素的陣列指標嗎?? 還有他算是有效記體體位置嗎??如果它是結構裡面資料成員要用malloc配置記憶體嗎? 發表人 - syao 於 2005/07/18 18:57:11
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-20 22:15:17 IP:211.22.xxx.xxx 未訂閱
#include 
#include     struct A
{
 char *name;       
}*student[10]; //用結構定義10個人資料    int main()
{
 int i;
 
 for ( i = 0 ; i < 9 ; i   ) 
 {
  student[i]=(A *)malloc(sizeof(A));
  student[i]->name = (char *)malloc(10);
  scanf("%s",student[i]->name);
  printf("%s",student[i]->name);
 }
 for ( i = 0 ; i < 9 ; i   ) 
 {
  free(student[i]->name);
  free(student[i]);
 }
 system("pause");
 return 0;
}
以上僅供示範,不含exception檢查~ ------------------- 學,然後知不足。 發表人 -
系統時間:2024-05-18 7:47:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!