2017-11-21 10 views
0

リンクリストの配列を作成しようとしていて、配列だけで問題が発生しました。コードは正常に実行されます(または少なくともprintfは関数内で実行されます)が、メインでループして印刷しようとすると、セグメンテーションフォルトが発生し、newLabel関数で行が印刷されません。このループではリンクリストの配列内のセグメンテーションフォールト

void newLabel(char *n, Label **p, int len) { 
    p[len] = malloc(sizeof(Label)); 
    p[len]->next = NULL; 
    p[len]->name = malloc(sizeof(char) * strlen(n)+1); 
    strcpy(p[len]->name, n); 
    printf("%s", p[len]->name); 
    ++labels; 
} 

int main(int argc, char const *argv[]) { 
    Label *p[100]; 
    for (labels = 0; labels < 5; labels++) { 
    newLabel("Hi", p, labels); 
    } 

    for (int i = 0; i <= labels; i++) { 
    printf("%s", p[labels]->name); 
    } 
    return 0; 
} 
+2

ちょうどそれをデバッガー – rkosegi

+0

で実行してください。文字列がLabelの名前フィールドに入り、関数がLabel固有のものだと思います。しかし、私はあなたが正しいと思います。 – jocal17

答えて

2
for (labels = 0; labels < 5; labels++) { 
    newLabel("Hi", p, labels); 
    } 

あなたは私にあなたがこの年末

+0

これは、メインプログラムからそれを移動するのは間違いです。それはまだそれを修正するときに動作しません。誰かにプリントループを置くと、newLabel関数が壊れるので、私はそれを移動しました。 forループがコメントアウトされたときと同じように、すべての名前を表示するわけではありません。 – jocal17

+0

はグローバルラベルですか?もしそれが2回インクリメントされていれば、makeはmain()に対してローカルになり、最初のループと同じようにprintループを実行します(例:int i = 0; i name); } – Pras

+0

ええ、それは問題でした。異なる機能を除いて元のものと同じです。ありがとう – jocal17

0

を割り当てられていない第六メンバーにアクセスしているこの次のループを*p

for (int i = 0; i <= labels; i++) { 
    printf("%s", p[labels]->name); 
    } 

の最初の5つの要素を割り当てられますループはこちら

for (labels = 0; labels < 5; labels++) { 
    newLabel("Hi", p, labels); 
    } 

labelsが初期化されることはありません5で、まだ下のループであなたはまだp[5]

for (int i = 0; i <= labels; i++) { 
    printf("%s", p[labels]->name); // this labels can be 5 here 
    } 

を印刷しようとしているので、境界内のループ

for (int i = 0; i < labels; i++) { 
    printf("%s", p[labels]->name); 
    } 
1

チェックアウトあなたのコード

for (int i = 0; i <= labels; i++) { //problem here 
    printf("%s", p[labels]->name); 
    } 

0からlabels(5)までループを開始します。それはあなたがコードの下で唯一の5つの要素

for (labels = 0; labels < 5; labels++) { 
    newLabel("Hi", p, labels); 
    } 

にメモリを割り当てるしている間、それは解決策は=ループのループIE用から削除され0,1,2,3,4,5すなわち6回に価値をラベルに実行すること構文は

for (int i = 0; i < labels; i++) 
関連する問題