【问题标题】:Why is the process being terminated after my code runs? Process returns 255为什么我的代码运行后进程被终止?处理返回 255
【发布时间】:2017-11-08 23:03:29
【问题描述】:

我是指针和创建链表的新手。代码只是整个事情的一部分。我试图让这部分更简单地进行测试和调试,但我仍然可以弄清楚。有人可以帮我弄清楚该进程在执行给定代码后是否被终止?

#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;
    }
}

这是输出的样子:

add funct works
added cards

Process returned 255 (0xFF)   execution time : 6.898 s

为什么返回 255?

任何方向将不胜感激!

**注意:我正在用 C 语言编写

【问题讨论】:

  • 尝试将return 0; 放在文件的最后一个} 之前

标签: c pointers struct linked-list nodes


【解决方案1】:

C 指针让你大跌眼镜 :) 你的程序崩溃了,因为你正在访问一个你没有初始化的指针,所以它应该指向的对象不存在。

请记住,指针只是对对象的引用。在你的情况下,你首先告诉我们 card 是一个指向 Card 对象的指针,在这里。

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

但请记住,您还没有告诉我们实际 Card 对象的位置类似

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

newNode->card=(Card*)malloc(sizeof(Card));// works because now there is an actual memory location pointed at.

总之,指针指向的是一张不存在的卡片!!!

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

newNode->card->value

最简单的解决方案是更改结构的定义,使 card 是实际对象而不是指针

typedef struct BagNode {
    Card card;//actual object not the pointer to an object
    struct BagNode* next;
}BagNode;

那就这样用吧

newNode->card.value

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

【讨论】:

    【解决方案2】:

    我的猜测是当你在做的时候

    newNode->card->value
    

    card 是一个空指针,因此给空指针的成员赋值是导致程序崩溃的原因

    【讨论】:

    • 不,你必须 malloc 卡
    • 我添加了 newNode->card = (Card*)malloc(sizeof(Card));现在可以了。谢谢!
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多