neat_mbr.cpp

C++枚举与类使用示例

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> #include <iostream.h>

enum Days { Monday, Tuesday, Wednesday, Thursday, Friday };

class NeatClass
{
  public:
    int *lucky_number;
    enum Days lucky_day;
};


void main(void)
 {
   NeatClass wow;
   int lucky = 1500;

   wow.lucky_day = Monday;
  
   wow.lucky_number = &lucky;

   cout << "My lucky number is " << *(wow.lucky_number) << endl;
   switch (wow.lucky_day)
   {
     case Monday: cout << "My lucky day is Monday/n";
                  break;

     default: cout << "My lucky day ain't any day but Monday/n";  
   };
 }

 

 

open file failed because of errno 22 on fopen: Invalid argument, file path: Exception raised from RAIIFile at C:\actions-runner\_work\pytorch\pytorch\builder\windows\pytorch\caffe2\serialize\file_adapter.cc:30 (most recent call first): 00007FFCBBC9366200007FFCBBC93600 c10.dll!c10::Error::Error [<unknown file> @ <unknown line number>] 00007FFCBBC9318A00007FFCBBC93130 c10.dll!c10::detail::torchCheckFail [<unknown file> @ <unknown line number>] 00007FFCB5ED8F0F00007FFCB5ED8E10 torch_cpu.dll!caffe2::serialize::FileAdapter::FileAdapter [<unknown file> @ <unknown line number>] 00007FFCB5ED208800007FFCB5ED1FF0 torch_cpu.dll!caffe2::serialize::PyTorchStreamReader::PyTorchStreamReader [<unknown file> @ <unknown line number>] 00007FFCB704A0EF00007FFCB7049F70 torch_cpu.dll!torch::jit::import_ir_module [<unknown file> @ <unknown line number>] 00007FFCB704A41F00007FFCB704A340 torch_cpu.dll!torch::jit::import_ir_module [<unknown file> @ <unknown line number>] 00007FFCB704B3BF00007FFCB704B350 torch_cpu.dll!torch::jit::load [<unknown file> @ <unknown line number>] 00000001401866EE00000001401865D0 ESLite64D.exe!main [S:\SVN\NEAT\ES\ESLite\main.cpp @ 28] 00000001401056B90000000140105680 ESLite64D.exe!invoke_main [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 79] 00000001401055620000000140105430 ESLite64D.exe!__scrt_common_main_seh [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 288] 000000014010541E0000000140105410 ESLite64D.exe!__scrt_common_main [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 331] 000000014010574E0000000140105740 ESLite64D.exe!mainCRTStartup [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp @ 17] 00007FFD7DD1734400007FFD7DD17330 KERNEL32.DLL!BaseThreadInitThunk [<unknown file> @ <unknown line number>] 00007FFD7F6626B100007FFD7F662690 ntdll.dll!RtlUserThreadStart [<unknown file> @ <unknown line number>]
06-19
### 解决 PyTorch 在使用 LibTorch 调用时因文件路径无效导致 `fopen` 错误 (`errno 22`) 的问题 #### 问题分析 用户在使用 PyTorch 和 LibTorch 时遇到了 `fopen` 错误,错误代码为 `errno 22`(无效参数)。此问题通常与文件路径解析失败有关。具体来说,可能的原因包括但不限于以下几点[^3]: - 文件路径中包含非法字符或格式不正确。 - 模型文件损坏或无法正确读取。 - 系统环境配置问题,例如缺少必要的动态链接库(如 `c10.dll`)[^1]。 此外,模型加载过程中可能出现的运行时错误也可能与文件路径相关。例如,`RuntimeError: [enforce fail at ..\caffe2\serialize\inline_container.cc:145]` 表明 PyTorch 在尝试读取模型文件时未能找到中央目录,这通常意味着模型文件已损坏或路径无效[^4]。 #### 解决方案 #### 1. 检查文件路径合法性 确保模型文件路径中没有非法字符或多余的换行符。如果路径中包含特殊字符(如 `\r` 或 `\n`),可能导致解析失败。可以通过以下方法验证路径: ```python import os model_path = 'densenet18-10500.pkl' if os.path.exists(model_path): print(f"Model file exists at {model_path}") else: print(f"Model file does not exist at {model_path}") ``` #### 2. 验证模型文件完整性 模型文件可能因传输或保存过程中的错误而损坏。可以尝试重新导出模型并验证其完整性。以下是重新导出模型的示例代码: ```python import torch import torchvision.models as models # 加载预训练模型 model = models.densenet121(pretrained=True) model.eval() # 创建示例输入张量 example_input = torch.rand(1, 3, 224, 224) # 使用 tracing 方法生成 TorchScript 模型 traced_model = torch.jit.trace(model, example_input) # 保存模型 torch.jit.save(traced_model, 'densenet121_jit.pt') ``` 保存后,确保文件路径正确且文件未被意外修改。 #### 3. 配置系统环境 如果系统缺少必要的动态链接库(如 `c10.dll`),可能会导致加载失败。建议安装最新版本的 Microsoft Visual C++ Redistributable 包以解决依赖问题[^1]。下载地址:[Microsoft Visual C++ 2015-2022 Redistributable](https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170)。 #### 4. 修改代码以兼容不同平台 在某些情况下,路径分隔符或编码问题可能导致文件无法正确加载。可以在代码中显式指定路径分隔符并确保跨平台兼容性。例如: ```cpp #include <torch/torch.h> #include <iostream> int main() { try { // 使用标准路径分隔符 std::string model_path = "densenet121_jit.pt"; torch::jit::script::Module module = torch::jit::load(model_path); if (!module.is_empty()) { std::cout << "Model loaded successfully." << std::endl; } else { std::cerr << "Failed to load model." << std::endl; } } catch (const c10::Error& e) { std::cerr << "Error loading the model: " << e.what() << std::endl; } } ``` #### 5. 调试文件路径问题 如果仍然遇到路径解析问题,可以使用调试工具(如 GDB 或 Visual Studio Debugger)检查程序运行时的路径变量。确保路径字符串未被意外修改或截断。 --- ### 示例代码:验证模型加载 以下是一个完整的 C++ 示例,展示如何加载和验证模型文件: ```cpp #include <torch/torch.h> #include <iostream> int main() { try { std::string model_path = "densenet121_jit.pt"; torch::jit::script::Module module = torch::jit::load(model_path); if (!module.is_empty()) { std::cout << "Model loaded successfully." << std::endl; // 创建示例输入 torch::Tensor input = torch::rand({1, 3, 224, 224}); torch::Tensor output = module.forward({input}).toTensor(); std::cout << "Output shape: " << output.sizes() << std::endl; } else { std::cerr << "Failed to load model." << std::endl; } } catch (const c10::Error& e) { std::cerr << "Error loading the model: " << e.what() << std::endl; } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值