2015-04-07 94 views
0

HelloI在編譯我的程序時遇到了問題。 爲什麼intArray指針在同一個對象的構造函數和成員函數display()中給出不同的地址?謝謝!構造函數和成員函數中的指針返回不同的地址

#include<iostream> 
using namespace std; 
class MyClass 
{ private: 
     int* intArray; 
     int arraySize; 
    public: 
     MyClass(int*,int); 
     ~MyClass() 
     {delete []intArray;}; 
     void display(); 
}; 
MyClass::MyClass(int intData[],int arrSize) 
{  int *intArray = new int[arrSize]; 
     cout<<intArray<<" "<<endl; 
}; 
void MyClass::display() 
{  cout<<intArray<<" "<<endl; 
} 
int main() 
{  int Data[10]={9,8,7,6,5,4,3,2,1,0}; 
     MyClass obj1(Data,10); 
     obj1.display(); 
} 
+6

因爲它們是2個不同的變量?您在MyClass的構造中聲明瞭一個新的intArray – danielfranca

+0

這裏您聲明瞭一個新的變量 int * intArray = new int [arrSize]; 使用與您的成員變量相同的名稱 您應該寫 intArray = new int [arrSize]; – nobs

+0

問題已解決。感謝您的幫助。 – Roaid

回答

7

在構造函數中,聲明瞭隱藏成員的局部變量。這兩個成員都未初始化,所以調用display將顯示未初始化的值。

你可能想沿

MyClass::MyClass(int intData[],int arrSize) : 
    intArray(new int[arrSize]), 
    arraySize(arrSize) 
{ 
    // assuming the input array specifies initial values 
    std::copy(intData, intData+arrSize, intArray); 
} 

行既然你要處理的原始指針到分配的內存,記得要遵循Rule of Three給類有效複製語義的東西。然後,一旦你對你的指針玩雜耍技巧感到滿意,就把它扔掉,然後用std::vector來代替。

+0

問題已解決。感謝您的幫助。 – Roaid