我們先來看看這段**吧!
void pointer_test()
memcpy(buf,"tant",4);
buf[4] = 2;
buf[5] = 0xa2;
buf[6] = 3;
buf[7] = 0;
*((unsigned int*)(buf+8)) = set_port;
buf[12] = 100;
//指標偏移
buf = buf + 13;
buf[0] = 0;
buf[2] = 2;
buf[3] = 0x23;
memcpy(g_buf ,buf,1024);
free(buf);//此時記憶體是否得到了釋放,buf的位址已經發生了位移。
buf = null;
}
free記憶體會得到段錯誤,因為指標已經偏移了,而 free(buf)會釋放出錯。
所以我們操作指標之時,我們需要將指標拷貝乙份,對拷貝指標進行操作,儲存原指標。
void pointer_test()
//malloc 成功之後,指標拷貝
char* temp_buf = buf;
//以後的操作由temp_buf來實現,這樣buf就不會發生位移了。
memcpy(temp_buf,"tan
c語言指標問題
c是一門可以直接操作記憶體的語言,但這並不代表我們就可以以自己主觀的意思來操作記憶體。看下面的 includevoid pr int p,int p1 int main void pr int p,int p1 執行後結果都是12.首先,我們要明白指標的定義是乙個存放位址的變數,也就是說,它指向的位...
c語言指標問題
對於以下 段 int a int p a int q a 5 printf d q p 當sizeof int 為4時,以下說法正確的是 a.因為第三行的錯誤不能編譯 b.因為第三行的錯誤執行時崩潰 c.輸出5 d.輸出20 指標的減法實際是位址間能存放多少個指標指向物件的資料型別的值。a是int型...
C 鍊錶經典問題(指標)
1 可以同時使用多個指標。需要同時跟蹤多個節點,要記住跟蹤哪些節點,並可以自由使用幾個不同的節點指標來同時跟蹤這些節點。同時使用多個節點,取適當的名稱,以便除錯 2 需要跟蹤當前節點的前乙個節點。無法追溯到鍊錶的前乙個節點,因此不僅要儲存當前節點,還要儲存前乙個節點。雙鏈表不同。3 雙鏈表 多乙個引...