c 語言指標操作經典問題

陌上花開緩緩歸以發表於2020-12-19

我們先來看看這段程式碼吧!

void pointer_test()
{
	unsigned int set_port = 65536;
	unsigned char *buf = (unsigned char *)malloc(1024);
	if(buf == NULL)
	{
		return -1;
	}
	
	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()
{
	unsigned int set_port = 65536;
	unsigned char *buf = (unsigned char *)malloc(1024);
	if(buf == NULL)
	{
		return -1;
	}
	
	//malloc 成功之後,指標拷貝 
	char* temp_buf = buf;

	//以後的操作由temp_buf來實現,這樣buf就不會發生位移了。
	memcpy(temp_buf,"tan

相關文章