我對函數調用之間的指針發生了什麼感到困惑。這不是我所期望的。我有以下情況:指針在整個函數調用中保持信息
SomeClass *p1= 0, *p2 = 0;
SomeMethod(p1, p2);
printf("P1 total: %d\n", p1->total); // crashes
printf("P2 total: %d\n", p2->total); // crashes
// method someMethod, where the values of the pointers are valid
void SomeMethod(SomeClass *p1, SomeClass *p2)
{
someMethodThatModifiesThePointers(&p1, &p2);
printf("P1 total: %d\n", p1->total); // prints valid value
printf("P2 total: %d\n", p2->total); // prints valid value
};
你可以從我的意見看,指針的。總屬性(整數)是該方法的內有效,但不再是它的外部有效。爲什麼會這樣?指針不應該丟失範圍。
準確地說,someMethodThatModifiesThePointers()
是opencv的cvExtractSURF
。我拉開了代碼以保持簡單。
請注意,您可以/必須通過另一個指針(即'SomeClass **'參數,將'&p1'傳遞給'SomeMethod'等等)模擬傳遞引用。 – delnan 2011-03-25 18:11:09
對不起,我在我的原始代碼中犯了一個小錯字,但我認爲它不會改變任何內容。只需在函數調用中的參數前添加&。 someMethodThatModifiesThePointers是cvExtractSURF,它實際分配和填充指針(它從圖像中收集SURF點並用SURF點填充指針)。 – vapo 2011-03-25 18:11:29
@vapo,這就是我的想法。在我的答案中同樣的解釋仍然適用。 – 2011-03-25 18:12:21