簡體   English   中英

c++ 錯誤:指向數組的指針

[英]c++ error : pointer that points to an array

在 XCode 中它說:線程 1:EXC_BAD_ACCESS(代碼=1,地址=0x3c000003e7)

#include <stdio.h>
#include "Assistance.h"
#define infity 999

using namespace std;
class WeightedDirGraph
{
public:
    WeightedDirGraph();
    WeightedDirGraph(int **g, int size);
    ~WeightedDirGraph();
    void BellmanFord();
    void Display();
protected:
    int size;
    int (*(*graph));

};

WeightedDirGraph::WeightedDirGraph(int **g, int s)
{
    int a[s][s];
    graph=(int **)new int *[s];
    for(int i=0;i<s;++i)
    {
        for(int j=0;j<s;++j)
        {
            printf("%d ",*(*(g+i)+j));      //THIS IS THE LINE OF CODE THAT SEEMS TO BE WRONG
        }
        cout<<endl;
    }
    size=s;  
}



int main()
{

  char vexs[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', };
  int m[7][7] =
    {
      {infity,     60,     50,     50,  infity, infity,  infity},
      {infity, infity, infity, infity,     -10, infity,  infity},
      {infity,    -20, infity, infity,      10, infity,      70},
      {infity, infity,    -20, infity,  infity,    -10,  infity},
      {infity, infity, infity, infity,  infity, infity,      30},
      {infity, infity, infity, infity,  infity, infity,      30},
      {infity, infity, infity, infity,  infity, infity,  infity}
    };
    WeightedDirGraph *g=new WeightedDirGraph((int **)m,7);


}

我試圖傳遞一個指向二維數組的指針並初始化這個 WeightedDirGraph。 但我無法運行此代碼。 我認為當我使用指針時一定有某種錯誤,但我不知道問題是什么。 有人能幫我嗎? 非常感謝。

數組不是指針,再多的轉換也無法改變這一事實。
*(g+i) (即g[i] )是m[i] ,它是int[7] ,而不是int*
當您將其第一個元素解釋為地址時,就會出現歡鬧。

您需要從指針數組開始,因為它可以轉換為指向指針的指針。

只需對代碼進行少量更改,它可能如下所示:

int m[7][7] =
{
  {infity,     60,     50,     50,  infity, infity,  infity},
  {infity, infity, infity, infity,     -10, infity,  infity},
  {infity,    -20, infity, infity,      10, infity,      70},
  {infity, infity,    -20, infity,  infity,    -10,  infity},
  {infity, infity, infity, infity,  infity, infity,      30},
  {infity, infity, infity, infity,  infity, infity,      30},
  {infity, infity, infity, infity,  infity, infity,  infity}
};
int* mp[7] = {m[0], m[1], m[2], m[3], m[4], m[5], m[6]};
WeightedDirGraph *g=new WeightedDirGraph(mp, 7);

更好的解決方案可能是重新考慮您的實現並將數據存儲在一維std::vector中。
此外, g[i][j]*(*(g+i)+j)更容易理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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