簡體   English   中英

帶指針的 Exc_bad_access

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM