gpt4 book ai didi

c++ - 访问冲突写入位置 0xCDCDCDCD

转载 作者:太空宇宙 更新时间:2023-11-04 14:53:56 24 4
gpt4 key购买 nike

我正在尝试使用一个结构“students”和另一个结构“stack”制作一个小型链表,它包含学生结构和指向下一个元素的指针。

但是我不断收到内存访问错误。我仔细检查以确保所有指针都已初始化(只有一个指针,Stacktop,初始化为 NULL)

结构定义如下:

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

using namespace std;

struct students
{
int matnr;
string name;
};

struct stack
{
students stud;
stack *next;
};

typedef struct stack Stack;
typedef Stack *ptrStack;

void push(students s);
students pop();
int isEmpty();
void printStack(students stud);

这是 push 函数(它一直让程序崩溃)

#include "stack.h"

ptrStack Stacktop = NULL;

void push(students s)
{
ptrStack stack = (ptrStack)malloc(sizeof(Stack));

if (stack == NULL)
{
cout << "!!FIN!!" << endl;
return;
}

stack->stud = s;
stack->next = Stacktop;
Stacktop = stack;

return;
}

这里是主要的:

#include "stack.h"

students readStuds()
{
students s;

cout << "Enter Student name: " << endl;
cin >> s.name;
cout << "Enter Matr Nr: " << endl;
cin >> s.matnr;

return s;
}

int main()
{

char c;

do {
push(readStuds());

cout << "Continue Entering Students? " << endl;
cin >> c;
cout << "----------------------" << endl;
cout << "----------------------" << endl;
} while (c != 'q');

cout << " POPPING STACK " << endl;
cout << " ............. " << endl;

while (isEmpty())
{
printStack(pop());
}

最佳答案

这个:

ptrStack stack = (ptrStack)malloc(sizeof(Stack));

分配足够的内存来容纳 struct stack a.k.a Stack,但是 malloc() 不做任何事情来初始化返回的内存.因此,特别是,您的新 堆栈 中的 string 包含随机垃圾,然后将由您的 cin >> s.name 解释,并假定为有效的 string,但事实并非如此,因此代码失败。

解决方案 - 使用 ptrStack stack = new Stack 代替。更好的是,编写适当的构造函数/析构函数、复制构造函数、赋值运算符等...

关于c++ - 访问冲突写入位置 0xCDCDCDCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30579430/

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