看板 C_and_CPP 關於我們 聯絡資訊
static char *b = NULL; void f(char *a) { memcpy(&b, &a, sizeof(char)); free(a); printf("%s", b); } 為什麼free(a)之後, b的值就不見了呢? 謝謝 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.222.31.187
netsphere:因為b是pointer end 06/03 10:31
s8752199:可以跟我講怎麼解決嗎 謝謝! 06/03 10:45
adrianshum:你這段東西的問題超多. 你不如先去看書搞清楚 pointer 06/03 10:55
adrianshum:memcpy 的概念? memory allocation 看來也很不清楚 06/03 10:56
ledia:你的 b 在之前其它地方有 malloc 嗎? 06/03 11:21
ledia:又, memcpy 那一行你想要的行為是什麼, 因為傳 double ptr 06/03 11:22
ledia:很可能跟你想要的完全不一樣 06/03 11:22
s8752199:嗯 我現在加上了 b = (char*)malloc(sizeof(char)); 06/03 11:22
s8752199:我想把a的東西完全拷貝到b 06/03 11:23
VictorTom:如a大所說, 您還是把pointer, memory alloc, array, 還 06/03 11:26
VictorTom:有char string的用法再看一下吧; sizeof(char)就只有一 06/03 11:26
VictorTom:個char, 放了'\0'也就沒空間了. 如果您要copy的東西就 06/03 11:27
VictorTom:真的只有一個char, 那其他用*b = *a就做完了不用memcpy 06/03 11:27
s8752199:嗯 其實我現在是要拷貝一個struct只是打char以為大家 06/03 11:30
s8752199:比較方便看 06/03 11:31
s8752199:結果是錯誤的方法 XD 06/03 11:31
重新一次好了 謝謝 static tInfo *uInfo = NULL; void show_Info(int n, tInfo *pInfo) { uInfo = (tInfo *)malloc(sizeof(tInfo)*n); memcpy(&uInfo, &pInfo, sizeof(tInfo)*n); free(pInfo); } 這樣用法有誤嗎? 謝謝 ※ 編輯: s8752199 來自: 61.222.31.187 (06/03 11:34)
VictorTom:如果struct只有普通變數沒有pointer那應該這樣就行了. 06/03 11:32
VictorTom:如果struct有pointer, 您要確認您要copy的就只要該位址 06/03 11:33
VictorTom:就好, 或者需要把指到的東西完整copy一份....@_@" 06/03 11:33
VictorTom:Er~~我說這樣就行了是包含推文a/b都有malloc合適size後. 06/03 11:34
s8752199:剛看了該struct 都是char 跟 int而已 06/03 11:35
VictorTom:我剛發現我錯了, 你的memcpy前兩個參數應該不用 & 06/03 11:36
VictorTom:memcpy是從某位址copy一段內容到另一個位址去.... 06/03 11:37
VictorTom:而你的uInfo與pInfo現在就應該是位址了....@_@" 06/03 11:37
s8752199:感恩 06/03 11:41