2016-04-23 2 views
0
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

typedef struct node 
{ 
    char *arr; 
    struct node *next; 
} node; 

int main() 
{ 
    char *word = (char *)malloc(sizeof(char) * 20); 
    strcpy(word, "jon jones"); 

    node *sentence; 
    sentence->arr = word;   //Problem here 
    printf("%s", sentence->arr); 

    return 0; 
} 

文字配列を動的に割り当てようとしています。そこに文字列を入れ、ノードのデータ要素を文字配列にする。私がプログラムを実行すると、私はセグメンテーションフォルトを取得します。私はそれが上でラベル付けされた行からだと思う。私が理解していないのは、私は文章 - > arrを単語配列の最初の要素を指すようにしたことです。なぜそれはそれのようなクラッシュでしょうか?前もって感謝します。ポインタがcの文字の配列を指している

+2

注:[必要](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-mallocはありません) 'malloc'の結果をキャストする – red0ct

答えて

0

ため

後の作品は、あなたは、ノードへのポインタを使用しているが、このノードが割り当てられていません。 使用: node sentence; sentence.arr = word; printf("%s", sentence.arr);

いいですね。 gdbを使用して、障害の原因となっている行を特定することもできます。

+0

もはや有効でなくなったときに、動的に割り当てられたメモリを解放する必要があります。 – SeB

+0

はい、私はこれを認識しており、それを行う方法を知っています。私ははるかに大きなプログラムに取り組んでいましたが、しばらくの間、この寒さを過ごすことができませんでしたので、なぜ「これ」または「それ」が働いていないのかを理解する小さなプログラムを作ろうとしました。あなたの時間と助けてくれてありがとう –

0
node *sentence; 
sentence->arr = word;   //Problem here 

ポインタsentenceが宣言されていますが、それは未定義の動作の原因となるので、それが初期化され、逆参照されていません。

はそれを逆参照する前にメモリを割り当て -

node *sentence; 
sentence=malloc(sizeof(*sentence)); 

また、あなたは、ノードは、このの代わりにstrcpyを使用したい場合は -

sentence->arr = word;  // but allocate memory to `arr` before copying 
0

をあなたの文章変数を初期化するのを忘れていました。私

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

typedef struct node 
{ 
    char *arr; 
    struct node *next; 
}node; 

int main() 
{ 
    char *word = (char *)malloc(sizeof(char) * 20); 
    strcpy(word, "jon jones"); 

    node *sentence = (node*)malloc(sizeof(node)); // Initialize node area 
    sentence->arr = word; 
    printf("%s", sentence->arr); 

    return 0; 
} 
0

wordのようにnodeのメモリを割り当てるか、またはstructポインタの代わりにstructを使用してください。トピックオフ

node *sentence; 
sentence = (node*)malloc(sizeof(node)); 
sentence->arr = word;   
printf("%s", sentence->arr); 

または

node sentence; 
sentence.arr = word;   
printf("%s", sentence->arr); 
関連する問題