2016-11-24 3 views
0

Cでリンクリスト/構造体に関する質問があります。リンクリストに頂点を追加してデータを挿入しようとしています。 あらかじめnewHeadにメモリを確保していても、アクセス違反はnewHead->name = newVertexNameになるのはなぜですか?コンテキストのC:リンク違反例外の結果となるリンクリストの構造体の初期化

コード:

typedef struct Vertex Vertex; 

typedef struct Vertex 
{ 
    char name; 
    Vertex *next; 
} Vertex; 

struct Vertex* AddVertex(Vertex* head, char newVertexName) 
{ 
    Vertex* newHead = malloc(sizeof(Vertex)); 
    newHead->name = newVertexName; // Access violation occuring here 
    newHead->next = head; 
    return newHead; 
} 

int main() 
{ 
    char s[100]; 
    const int nNrOfVerts = 27; 
    Vertex* adjList[28]; 

    for(int i = 0; i <= nNrOfVerts; ++i) 
    { 
     adjList[i] = NULL; 
    } 

    for(int i = 1; i <= nNrOfVerts; ++i) 
    { 
     if(scanf("%s", s) == 1) 
     { 
      adjList[i] = AddVertex(adjList[i], s[i-1]); 
     } 
     else 
     { 
      break; 
     } 
    } 

    return 0; 
} 

はありがとうございました!

+1

あなたは 'malloc'は、すべての呼び出しを上成功していることを確認しましたか? –

+0

@Scott Hunter正確に検証するのはどういう意味ですか?エラーは、上記のステートメントの最初の実行で発生します... – replax

+0

BTW '[i-1]' - > 's [0]' – BLUEPIXY

答えて

1

まず第一に、あなたはファイルをインクルードする必要があります。

#include <stdlib.h> /* for malloc/free */ 
#include <stdio.h> /* for scanf */ 

それはあなたのアクセス違反を修正します。

第二に、私はあなたがここにバグがあると思う:対

adjList[i] = AddVertex(adjList[i], s[i-1]); 

を:

adjList[i] = AddVertex(adjList[i-1], s[i-1]); 
+0

現在の方法は、次のポインタよりもむしろ前のようになります。それは逆接続です。 – SenselessCoder

関連する問題