[問題] 指標轉型問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
在ST_TEST str1為local變數時, 將指標轉型成int,再將int轉回成指標後,
會發生Segmentation fault。不轉型的話就不會有問題。
test()和test2()說明轉型和不轉型的差型。
但如果將ST_TEST str1; 定為成global變數,test2()的轉型也還可以使用。
int main()
{
ST_TEST str1;
test(&str1);
test2((int)(&str1));
}
void test(ST_TEST *const str_point)
{
ST_TEST str2;
memcpy((ST_TEST *)&str2, (ST_TEST *)str_point, sizeof(ST_TEST));
}
void test2(int str_int)
{
ST_TEST str3;
memcpy((ST_TEST *)&str3, (ST_TEST *)str_int, sizeof(ST_TEST));
}
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
http://pastebin.com/cMiJiCsf
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.43.50.107
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1421477604.A.ED3.html
※ 編輯: cityhigh (180.43.50.107), 01/17/2015 14:54:22
※ 編輯: cityhigh (180.43.50.107), 01/17/2015 14:56:09
→
01/17 15:46, , 1F
01/17 15:46, 1F
→
01/17 15:47, , 2F
01/17 15:47, 2F
→
01/17 15:49, , 3F
01/17 15:49, 3F
→
01/17 16:19, , 4F
01/17 16:19, 4F
→
01/17 16:20, , 5F
01/17 16:20, 5F
→
01/17 16:21, , 6F
01/17 16:21, 6F
→
01/17 16:33, , 7F
01/17 16:33, 7F
→
01/17 16:34, , 8F
01/17 16:34, 8F
※ 編輯: cityhigh (180.43.50.107), 01/17/2015 16:43:30
※ 編輯: cityhigh (180.43.50.107), 01/17/2015 16:43:51
→
01/17 16:50, , 9F
01/17 16:50, 9F
→
01/17 16:51, , 10F
01/17 16:51, 10F
→
01/17 16:51, , 11F
01/17 16:51, 11F
→
01/17 17:42, , 12F
01/17 17:42, 12F
→
01/17 20:54, , 13F
01/17 20:54, 13F
→
01/17 20:55, , 14F
01/17 20:55, 14F
→
01/17 20:56, , 15F
01/17 20:56, 15F
→
01/17 20:56, , 16F
01/17 20:56, 16F
→
01/17 20:58, , 17F
01/17 20:58, 17F
→
01/17 21:02, , 18F
01/17 21:02, 18F
→
01/17 21:03, , 19F
01/17 21:03, 19F
→
01/18 00:10, , 20F
01/18 00:10, 20F
→
01/18 00:11, , 21F
01/18 00:11, 21F
推
01/18 02:39, , 22F
01/18 02:39, 22F
→
01/18 13:00, , 23F
01/18 13:00, 23F
→
01/18 13:01, , 24F
01/18 13:01, 24F
→
01/18 13:01, , 25F
01/18 13:01, 25F
推
01/18 13:34, , 26F
01/18 13:34, 26F
→
01/18 13:36, , 27F
01/18 13:36, 27F
→
01/18 13:36, , 28F
01/18 13:36, 28F
→
01/19 09:16, , 29F
01/19 09:16, 29F