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