418 发表于 2024-10-4 14:21

【unity 记录踩坑过程】c# 调用 C 编译出的dll异常闪退

用C写的代码有这么一段(请无视这个糟糕的变量命名)
```C
double a;
double b;
double c;
double d;

double aa;
double bb;
double cc;
```
是二维double数组,比较大,开发的时候报过`0xC00000FD`,栈溢出。于是写了个创建二维数组的函数
```C
double** create_2d_array(int rows, int cols) {
    double** array = (double**)malloc(rows * sizeof(double*));
    for (int i = 0; i < rows; i++) {
      array = (double*)malloc(cols * sizeof(double));
    }
    return array;
}
```
本来是没问题的,坏就坏在,我在开发的时候偷懒了,**没把所有大数组的初始化用这个函数创建**,留了四个,像这样
```C
double a;
double b;
double c;
double d;

double **aa = create_2d_array(123, 123);
double **bb = create_2d_array(123, 123);
double **cc = create_2d_array(123, 123);
```
但是,**build的时候它没报错啊!**于是就这么编译成dll了,然后c# 调用,直接闪退。

我不是专业的游戏开发,不知道怎么debug找log,于是先用ai生成了个能够正常调用并执行的代码,然后把我的代码一点点的复制过去,看复制到哪一坨的时候unity编辑器会闪退。

在这个过程不出意外又又踩坑了。dll是放在Plugins目录里的嘛,每次成功加载后都删不掉,有时候又能删掉,**替换掉新dll后执行的还是旧dll**。

因此浪费了不少时间 :(

海水很咸 发表于 2024-10-4 20:58

double** create_2d_array(int rows, int cols) {
    return(double**)malloc(rows * cols * sizeof(double));
}
页: [1]
查看完整版本: 【unity 记录踩坑过程】c# 调用 C 编译出的dll异常闪退