gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:00:15 25 4
gpt4 key购买 nike

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

#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写的

最佳答案

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

请记住,指针只是对对象的引用。在您的例子中,您首先在此处告诉我们卡片是指向 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

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

关于c - 为什么在我的代码运行后进程被终止?处理返回 255,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47191204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com