在动态内存分配中获取运行时错误

时间:2017-03-17 04:51:29

标签: c++ linked-list runtime-error dynamic-memory-allocation

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

这是主要功能

add_action('woocommerce_add_order_item_meta','add_order_item_meta',1,2);

function add_order_item_meta($item_id, $values) {

    if(isset($values['_my_custom_info']) && !empty($values['_my_custom_info'])) {
        // Get the custom array
        $arrCustomInfo = $values['_my_custom_info'];

        // For each custom element
        foreach($arrCustomInfo AS $key => $arrInfo) {

            if(isset($arrInfo['quantity']) && !empty($arrInfo['quantity'])) {
                // Save variation addon info
                $strKey = $arrInfo['name'] . ' X ' . $arrInfo['quantity'];

                // Save custom order item meta
                wc_add_order_item_meta($item_id, $strKey . ' ', wc_price($arrInfo['price'] * $arrInfo['quantity']));
                wc_add_order_item_meta($item_id, 'Product Image ', $arrInfo['image']);
            }
        }
    }
}

这是带有函数的链表类

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;
}

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

3 个答案:

答案 0 :(得分:1)

您将成员LinkedList::createMemory初始化为空指针。

然后在node* temp=headtemp使createMemory成为空指针。

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

如果您希望列表中有32个预分配的节点,那么您实际应该为这些节点分配内存。

答案 1 :(得分:0)

LinkedList memory;
memory.createMemory();

此代码可能是您的错误的来源。内存还没有任何值,所以当你尝试访问内存中的“createMemory”函数时,会得到一个空指针错误。
通常,在提出问题时尝试提供更多信息。如果你添加了什么错误,它出现在哪一行,错误消息或类似的东西,这个问题会更清楚。

答案 2 :(得分:0)

当您调用Memory.createMemory();时,此程序将崩溃。 由于您没有在函数temp中为createMemory()分配内存,temp指向NULL,因此temp->name="Free";会使您的程序崩溃。您应该使用newtemp分配内存。您应该尝试this site来帮助您。

BTW,你对命令参数的处理方式不合适,如果用户输入的参数超过2个,你告诉用户有Not enough commands

if(argc==2)
  command = argv[1];
else cout<<"Not enough commands"<<endl;