该程序应该像操作系统那样分配内存。
这是主要功能
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;
}
每当我调用其中一个类函数时,我都会遇到运行时错误,我不明白为什么
答案 0 :(得分:1)
您将成员LinkedList::createMemory
初始化为空指针。
然后在node* temp=head
中temp
使createMemory
成为空指针。
最后在temp->name="Free"
的循环中你执行{{1}}取消引用空指针并导致未定义的行为并且很可能崩溃。
如果您希望列表中有32个预分配的节点,那么您实际应该为这些节点分配内存。
答案 1 :(得分:0)
LinkedList memory;
memory.createMemory();
此代码可能是您的错误的来源。内存还没有任何值,所以当你尝试访问内存中的“createMemory”函数时,会得到一个空指针错误。
通常,在提出问题时尝试提供更多信息。如果你添加了什么错误,它出现在哪一行,错误消息或类似的东西,这个问题会更清楚。
答案 2 :(得分:0)
当您调用Memory.createMemory();
时,此程序将崩溃。
由于您没有在函数temp
中为createMemory()
分配内存,temp
指向NULL,因此temp->name="Free";
会使您的程序崩溃。您应该使用new
为temp
分配内存。您应该尝试this site来帮助您。
BTW,你对命令参数的处理方式不合适,如果用户输入的参数超过2个,你告诉用户有Not enough commands
。
if(argc==2)
command = argv[1];
else cout<<"Not enough commands"<<endl;