#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;
}
我正在尝试动态分配字符数组。在其中放置一个字符串,然后使节点的数据元素指向字符数组。当我运行程序时,我得到一个分段错误。我怀疑它来自我上面标注的那条线。我不明白的是,我做了句子 - &gt; arr指向单词数组的第一个元素。为什么会这样崩溃?提前致谢。
答案 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
答案 1 :(得分: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;
}
答案 2 :(得分:0)
您正在使用指向节点的指针,但尚未分配此节点。
使用 :
node sentence;
sentence.arr = word;
printf("%s", sentence.arr);
应该会更好。 您还可以使用gdb找出导致错误的行。
答案 3 :(得分:0)
为node
分配内存word
,或者使用struct而不是struct pointer。
node *sentence;
sentence = (node*)malloc(sizeof(node));
sentence->arr = word;
printf("%s", sentence->arr);
或
node sentence;
sentence.arr = word;
printf("%s", sentence->arr);