【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**。
因此浪费了不少时间 :( double** create_2d_array(int rows, int cols) {
return(double**)malloc(rows * cols * sizeof(double));
}
页:
[1]