gpt4 book ai didi

c++ - 在动态内存分配中出现运行时错误

转载 作者:行者123 更新时间:2023-11-30 05:16:03 25 4
gpt4 key购买 nike

程序应该像操作系统一样分配内存。

这是主要功能

int main (int argc, char* argv[]){
string command;

if(argc==2)
command = argv[1];

else cout<<"Not enough commands"<<endl;

if (command.compare("best"))
cout<<"Using best fit algorithm"<<endl;

if (command.compare("worst"))
cout<<"Using worst fit algorithm"<<endl;

cout<<"\t1.Add Program\n";
cout<<"\t2.Kill Program\n";
cout<<"\t3.Fragmentation\n";
cout<<"\t4.Print Memory\n";
cout<<"\t5.Exit\n";

LinkedList Memory;
Memory.createMemory();

int choice;
cin>>choice;
cout<<"choice - "<<choice<<endl;

if (choice==1){
string programName;
cin>>programName;
cout<<"Program name - "<<programName<<endl;
int si;
cin>>si;
cout<<"Program size (KB) - "<<si<<endl;
Memory.addProgram(si, programName);
}
if (choice==2){
string programName;
cin>>programName;
cout<<"Program name - "<<programName<<endl;
Memory.killProgram(programName);
}
if (choice==4){
Memory.print();
}
if (choice==5){
return 1;
}
return 0;
}

这是链表类及其函数

 class LinkedList{
private:
struct node{
string name;
node *next;
};
typedef struct node * nodePointer;
nodePointer head;
public:
void createMemory();
void addProgram(int val, string s);
void killProgram(string s1);
void print();
void fragmentation();
LinkedList(){head=NULL;}
};
void LinkedList::createMemory(){
int i=0;
node* temp=head;
while(i<32){
temp->name="Free";
temp=temp->next;
i++;
}
};

void LinkedList::addProgram(int val, string s){
int i=0;
node* temp=head;
while(temp->name!="Free")
temp=temp->next;
while(temp->name=="Free"){
while (i<val){
temp->name=s;
temp=temp->next;
i++;
}
}
};

void LinkedList::killProgram(string s){
node* temp=head;
while(temp->name!=s)
temp=temp->next;
while(temp->name==s)
temp->name="Free";
};

void LinkedList::print(){
node*temp=head;
int i=0;
while(i<32){
cout<<temp->name<<"\t";
temp=temp->next;
if ((i+1)%8==0){
cout<<endl;
}
i++;
}
};

每当我调用其中一个类函数时,我都会遇到运行时错误,我不明白为什么

最佳答案

您有成员 LinkedList::head,您将其初始化为空指针。

然后在 LinkedList::createMemory 中,您执行 node* temp=head 使 temp 成为空指针。

最后,在 createMemory 的循环中,您执行 temp->name="Free" 取消引用空指针并导致未定义的行为并且很可能发生崩溃。

如果您想要在列表中预分配 32 个节点,那么您实际上应该为这些节点分配内存。

关于c++ - 在动态内存分配中出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42849447/

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