我正在嘗試使用一個結構「學生」和另一個結構「堆棧」來製作一個小鏈表,該結構包含學生結構和指向下一個元素的指針。訪問衝突寫入位置0xCDCDCDCD
但是我不斷地收到一個存儲器訪問錯誤。我雙檢查,以確保所有的指針被初始化(只有一個指針,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);
這裏是推送功能(這使崩潰的PROGRAMM)
#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());
}
}
不要在C++中使用malloc – Borgleader
您正在通過malloc或new使用已分配的內存,但從未由應用程序編寫[何時以及爲什麼OS將內存初始化爲0xCD ,0xDD等malloc/free/new/delete?](http://stackoverflow.com/q/370195/995714) –
C語言不包含'cin'或'cout',所以你的C標籤是不適當。即使它們有相似之處,它們也不是*相同的語言。請僅使用與您要問的問題實際相關的標籤;否則會破壞標籤系統的用途。謝謝。 –