用C写的代码有这么一段(请无视这个糟糕的变量命名)
double a[123][123];
double b[123][123];
double c[123][123];
double d[123][123];
double aa[123][123];
double bb[123][123];
double cc[123][123];
是二维double数组,比较大,开发的时候报过0xC00000FD ,栈溢出。于是写了个创建二维数组的函数
double** create_2d_array(int rows, int cols) {
double** array = (double**)malloc(rows * sizeof(double*));
for (int i = 0; i < rows; i++) {
array[i] = (double*)malloc(cols * sizeof(double));
}
return array;
}
本来是没问题的,坏就坏在,我在开发的时候偷懒了,没把所有大数组的初始化用这个函数创建,留了四个,像这样
double a[123][123];
double b[123][123];
double c[123][123];
double d[123][123];
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。
因此浪费了不少时间 :(
|