[英]Exc_bad_access with pointers
我一直在一個使用矩陣和圖形的項目中工作。 問題是當我編譯它時,彈出下一行:
EXC_BAD_ACCESS(代碼=2,地址=0x7ffff5f3ffff8)
它出現在下一個方法中; 這是我的類的構造函數:
GrafoMatriz::GrafoMatriz(){
maxVerts = 1;
GrafoMatriz(maxVerts);
}
typedef int * pint;
class GrafoMatriz {
...
int maxVerts;
int numVerts;
Vertice * verts; // there's another class Vertice
int ** matAd;
GrafoMatriz();
GrafoMatriz(int mx);
...
}
GrafoMatriz::GrafoMatriz (int mx){
maxVerts = mx;
verts = new Vertice[mx];
matAd = new pint[mx];
numVerts = 0;
for (int i = 0; i < mx; i++)
matAd[i] = new int[mx];
}
我一直在閱讀有關可能出現的問題,指針可能有問題:
指針可能永遠不會被初始化。
指針可能被意外覆蓋,因為您超出了數組的邊界。
指針可能是被錯誤轉換然后寫入的對象的一部分。
以上任何一個都可能損壞了現在指向或靠近該指針的不同指針,並且使用該指針會損壞該指針(依此類推)。
我想這是關於我的指針pint
,但我是 C++ 的新手。 所以,我一直無法修復它。 順便說一下,我在 Intel Macbook Pro 上使用 Xcode 6.4。
正如@kuroineko 在評論中提到的,您不能從 C++ 中的另一個構造函數調用構造函數。 如果您使用C++11 (或更高版本的標准),那么您可以使用委托構造函數。 否則你可能想定義一個初始化函數,例如,像這樣:
void GrafoMatriz::Initialize(int mx){
maxVerts = mx;
verts = new Vertice[mx];
matAd = new pint[mx];
numVerts = 0;
for (int i = 0; i < mx; i++)
matAd[i] = new int[mx];
}
然后你可以從不同的構造函數調用這個初始化函數:
GrafoMatriz::GrafoMatriz(){
Initialize(1);
}
GrafoMatriz::GrafoMatriz (int mx){
Initialize(mx);
}
據我所知,其余顯示的代碼應該可以編譯。 我不知道與您的變量matAd
相關的代碼是否正確,但至少它不會讓我崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.