所以我试图从用户那里获得输入并使用数组将其存储在链表中(每5个字符创建一个新的链表)。获得EOF后我想打印输入(实际打印每个链表中的数组) 这是我的代码:
save: function (rows) {
gridStorage.uid = rows.length
localStorage.setItem(STORAGE_KEY, JSON.stringify(rows))
}
我收到“Segmentation fault(core dumped)”错误..
答案 0 :(得分:2)
这是未定义的行为:
int c,i;
charNode *head=malloc(sizeof(charNode));
charNode *current=head;
while((c=getchar())!=EOF){
while(i<MAX){
current->arr[i++]=c;
}
因为您使用i
未初始化来访问您的阵列,这可能会产生Segmentation错误。
改变这个:
printf("\n %d \t",head->arr[j++]);
到此:
printf("\n %c \t",head->arr[j++]);
这样您就可以打印字符而不是数字。
只需将i
初始化为0即可开始,快乐调试! =)
答案 1 :(得分:0)
int main(){
char c;
charNode *head=malloc(sizeof(charNode));
charNode *current=head;
int i = 0;
while((c=getchar())!=EOF){
getchar();
while(i<MAX){
current->arr[i++]=c;
}
i=0;
addNode(¤t);
}
printAll(head);
return 0;
}
void addNode(charNode **current){
struct charNode *link = malloc(sizeof(struct charNode));
link->next = NULL;
(*current)->next =link;
*current=(*current)->next;
}
void printAll(charNode *head){
int j=0;
if(head!=NULL){
while(j<MAX){
printf("%c\n",head->arr[j++]);
}
if(head->next != NULL)
printAll(head->next);
}
}
我改变了你的代码。特别是看看addNode()。现在它可以正常工作