我是指针和创建链表的新手。代码只是整个事情的一部分。我试图让这个部分更简单的测试和调试,但我仍然可以弄明白。有人可以帮我解决这个过程在执行给定代码后被终止吗?
#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写作
答案 0 :(得分:1)
我的猜测是,当你正在做
时newNode->card->value
card是一个空指针,因此为空指针的成员分配值是导致程序崩溃的原因
答案 1 :(得分:1)
C指针正在打扰你我的朋友:)你的程序崩溃是因为你正在访问一个你没有初始化的指针,所以它应该指向的对象不存在。
记住指针只是对象的引用。在你的情况下,你首先告诉我们卡是指向Card对象的指针,在这里。
typedef struct BagNode {
Card* card;
struct BagNode* next;
}BagNode;
但请记住您尚未告诉我们实际卡片对象的位置类似
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
最简单的解决方案是更改结构的定义,使得卡是实际对象而不是指针
typedef struct BagNode {
Card card;//actual object not the pointer to an object
struct BagNode* next;
}BagNode;
然后像这样使用它
newNode->card.value
否则,您可以在尝试使用之前使用卡片对象的地址初始化卡片指针。
答案 2 :(得分:0)
OS正在抛出分段错误,因为你应该分配内存“card”,因为它是一个指向某个无效地址的未初始化指针。
Task
并且在main()函数成功完成后,它返回0或1.据我所知,它的失败因此它返回1,即它在第二个字节中返回1,这只不过是255.