int Add_Edge_To_Vertex(int vertexFromId,int vertexToId){
vertex vertexTo=vertices[vertexToId];
if(vertexTo.edgesInArrLength == vertexTo.numOfEdgesIn){ //multiply this vertex arr of edges if needed
vertices[vertexToId].edgesInArrLength = (vertices[vertexToId].edgesInArrLength)*2;
tmpVertexEdges = (edge*)realloc((vertices[vertexToId].edges),(vertices[vertexToId].edgesInArrLength)*sizeof(edge));
if(tmpVertexEdges != NULL) {
vertices[vertexToId].edges = tmpVertexEdges;
}
else
{
free(tmpVertexEdges);
return 0;
}
}
}
typedef struct vertex
{
char* name; //not unique
int id; //unique
edge* edges; //array edges
int outDegree;
int edgesInArrLength;
int numOfEdgesIn;
double rank;
}vertex;
これが頂点を初期化する方法です-
vertex res={(char *)malloc(strlen(name)*sizeof(char)),verticesCount,(edge*)calloc(1, sizeof(edge)),0,1,0,1};
エッジがこの構造体の場合-
typedef struct edge
{
int fromVertexId;
int toVertexId;
double weight;
}edge;
vertex.edges 配列を 2 倍にしようとすると (3 ~ 12 行目)、realloc 部分でプログラムがクラッシュし、次のエラー メッセージが表示 されます - * glibc が検出されました/home/froike/workspaceC/Page Ranking/Debug/Page Ranking: malloc(): メモリ破損: 0x00000000009711d0 * *