我是C++的新手,正在嘗試使用動態內存來創建一些基本對象。 我傳遞一個int參數給一個方法,它正在改變全局變量的值。我認爲這與我爲新對象分配內存的方式有關,我無法用其他方式編譯它。Seg Fault - 將變量傳遞給方法更改全局值
int main() {
int inp;
CRectangle rectb (2,2);
cout << "enter number of items to add" << endl;
cin >> inp; // let's say inp = 7
rectb.addItemsArray(inp);
cout << "inp after adding items: " << inp << endl; // inp is now 1.
}
頭文件:
class CRectangle {
int width;
int height;
item *items[]; // SOLUTION: change this line to "item *items"
int input;
public:
CRectangle (int,int);
int addItemsArray(int);
int area() { return (width*height); }
int get_items(int);
};
- 和 -
class item {
int foo;
char bar;
public:
//SOLUTION add "item();" here (a default constructor declaration without arguments)
item (int, char);
int get_foo();
char get_bar();
};
方法:
int CRectangle::addItemsArray(int in) {
cout << "value of in at begginning:" << in << endl; //in = 7
int i;
i = 0;
//SOLUTION: add "items = new item[in];" on this line.
while (i < in) {
items[i] = new item(1, 'z'); //SOLUTION: change this line to "items[i] = item(1, 'z');"
i++;
}
cout << "value of in at end " << in << endl; //in = 7
return 1;
}
有時我得到一個總線錯誤或賽格故障。有時它可以像預期的那樣使用較低的數字,如2或3,但並不總是如此。
任何幫助將不勝感激。
編輯(CRectangle的構造函數):
CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}
(項目的構造函數):
/* SOLUTION add default item constuctor
item::item() {
foo = 0;
bar = 'a';
}
*/
item::item(int arg, char arg2) {
foo = arg;
bar = arg2;
}
難道您發佈CRectangle的構造函數的實現? – Erwald 2012-04-17 13:48:53
是的,我們需要看看它是如何初始化「items」的。 (爲什麼不使用類似'vector'的東西來爲你做所有這些事情?) – 2012-04-17 13:49:22
沒有這個類的其他代碼,很難知道什麼是錯的。不過,我的第一個猜測會與你的物品數組有關。你是否曾經(重新)分配空間來記錄指向新項目的指針? – atk 2012-04-17 13:50:13