我正在使用谷歌C++測試工具進行單元測試。我是新手C程序員和測試人員。 以下是我的代碼片段:指向結構的運行時錯誤
TEST_F (def_fix, SR_M_T) {
I_M_S * arg;
RM__S_F_R_T* message_data;
char mT[MAX_M_T_LENGTH] = "data";
strcpy(message_data->mT,mT);
message_data->rUID[0] = '\0';
message_data->uT[0] = '\0';
unsigned char buffer[sizeof(RM__S_F_R_T)+2];
memcpy(&buffer[2],message_data,sizeof(RM__S_F_R_T));
buffer[0] = 1; //This assignment is not important for this test
buffer[1] = 2; //This assignment is not important for this test
arg->payload_data = buffer;
handleSR(arg);
}
上面並正在創造什麼傳入消息。此傳入消息arg
將用作參數來調用函數handleSR (void *).
def_fix
是一個默認夾具類,其中包含SetUp()
和TearDown()
並且沒有什麼奇特的。
RM__S_F_R_T
是一個包含3個字符串的結構。 I_M_S
是包含指向RM__S_F_R_T
的指針的結構。
當我谷歌測試這個,它給出了分割錯誤。但是,當我更改: RM__S_FR_R_ * message_data;
到RM__S_FR_R_ message_data;
和使用.
運算符而不是->
運算符,事情往往工作。誰能解釋一下?
您的'message_data'指針變量正在被使用未初始化。 – jxh
所以這是一個運行時錯誤,而不是編譯錯誤? – jerry
@jerry,是的,分段錯誤總是運行時錯誤。如果編譯器得到分段錯誤,則意味着編譯器崩潰。 –