Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么在我的代码运行后进程被终止?进程返回255_C_Pointers_Struct_Linked List_Nodes - Fatal编程技术网

C 为什么在我的代码运行后进程被终止?进程返回255

C 为什么在我的代码运行后进程被终止?进程返回255,c,pointers,struct,linked-list,nodes,C,Pointers,Struct,Linked List,Nodes,我不熟悉指针和创建链表。代码只是整个过程的一部分。我试图使这一部分的测试和调试更简单,但我仍然能够解决它。有人能帮我弄清楚进程在执行给定代码后是否被终止吗 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #define SPADE "SPADE" #define CLUB "CLUB" #define DIAMOND "DIAMOND" #d

我不熟悉指针和创建链表。代码只是整个过程的一部分。我试图使这一部分的测试和调试更简单,但我仍然能够解决它。有人能帮我弄清楚进程在执行给定代码后是否被终止吗

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

#define SPADE "SPADE"
#define CLUB "CLUB"
#define DIAMOND "DIAMOND"
#define HEART "HEART"

typedef struct Card{
    int value;
    char suit[10];
}Card;

typedef struct BagNode {
    Card* card;
    struct BagNode* next;
}BagNode;

int main() {

    BagNode* head = NULL;
    BagNode* tail = NULL;

    const char* suit = SPADE;
    int value = 6;


    if(tail == NULL)
    {
        printf("add funct works\n");
        BagNode* newNode = (BagNode*)malloc(sizeof(BagNode));   // allocate space
        newNode->card->value = value;                                  // assign value
        strcpy(newNode->card->suit, suit);                      // assign value
        head = newNode;
        tail = newNode;
        printf("added cards\n");
    }
    else{
        BagNode* newNode = (BagNode*)malloc(sizeof(BagNode));   // allocate space
        newNode->card->value = value;                                  // assign value
        strcpy(newNode->card->suit, suit);                      // assign suit
        tail->next = newNode;
        tail = newNode;
    }
}
为什么它返回255

任何方向都将不胜感激


**注意:我是用C写的,我猜当你在写的时候

newNode->card->value

卡片是一个空指针,所以给空指针的成员分配一个值是导致程序崩溃的原因

我猜当你这样做的时候

newNode->card->value

卡是一个空指针,因此为空指针的成员分配一个值是导致程序崩溃的原因

C指针正在打击你,我的朋友:)你的程序正在崩溃,因为你正在访问一个尚未初始化的指针,所以它应该指向的对象不存在

请记住,指针只是对对象的引用。在你的例子中,你首先告诉我们卡片是一个指向卡片对象的指针,在这里

typedef struct BagNode {
    Card* card;
    struct BagNode* next;
}BagNode;
但是请记住,您还没有告诉我们实际卡对象的位置

Card mycard;
newNode->card=&mycard;//pointer equals to address of mycard

简而言之,指针指向一张不存在的卡片

当您试图访问这张不存在的卡时,程序崩溃

newNode->card->value
最简单的解决方案是更改结构的定义,使卡成为实际对象而不是指针

typedef struct BagNode {
    Card card;//actual object not the pointer to an object
    struct BagNode* next;
}BagNode;
然后像这样使用它

newNode->card.value

或者,您可以在尝试使用卡对象之前,用卡对象的地址初始化卡指针。

C指针正在打击您,我的朋友:)您的程序正在崩溃,因为您正在访问一个尚未初始化的指针,因此它应该指向的对象不存在

请记住,指针只是对对象的引用。在你的例子中,你首先告诉我们卡片是一个指向卡片对象的指针,在这里

typedef struct BagNode {
    Card* card;
    struct BagNode* next;
}BagNode;
但是请记住,您还没有告诉我们实际卡对象的位置

Card mycard;
newNode->card=&mycard;//pointer equals to address of mycard

简而言之,指针指向一张不存在的卡片

当您试图访问这张不存在的卡时,程序崩溃

newNode->card->value
最简单的解决方案是更改结构的定义,使卡成为实际对象而不是指针

typedef struct BagNode {
    Card card;//actual object not the pointer to an object
    struct BagNode* next;
}BagNode;
然后像这样使用它

newNode->card.value

或者,您可以在尝试使用卡对象之前用卡对象的地址初始化卡指针。

操作系统抛出分段错误,因为您应该分配内存“卡”,因为它是指向某个无效地址的未初始化指针

  so for this add this line :
              newNode->card=malloc(sizeof(Card));
    before this line 
              newNode->card->value = value; 

main()函数成功完成后,返回0或1。据我所知,在你的情况下,它失败了,所以它返回1,即返回1在第二个字节,这只是255

操作系统抛出分段错误,因为您应该分配内存“卡”,因为它是指向某个无效地址的未初始化指针

  so for this add this line :
              newNode->card=malloc(sizeof(Card));
    before this line 
              newNode->card->value = value; 

main()函数成功完成后,返回0或1。据我所知,在你的情况下,它失败了,所以它返回1,即返回1在第二个字节,这只是255

尝试放置
返回0
就在文件的最后一个
}
之前尝试放置
返回0
就在文件号的最后一个
}
之前,您必须添加malloc cardI newNode->card=(card*)malloc(sizeof(card));现在它可以工作了。谢谢不,您必须添加malloc cardI newNode->card=(card*)malloc(sizeof(card));现在它可以工作了。谢谢