C#中如何替代C/C++中的malloc函数(非托管指针)

分享

这个问题是在我将pi_agm.c移植到C#时研究的,话不多说,直接进入正题。

提示:如果你从来没有用过指针,请先学习指针的含义以及用法。

首先在类名前面加入unsafe关键字,例如

unsafe class Program

这是由于C#程序托管于.NET平台之上,对指针的操作是有危险性的。并且要在Properties(在解决方案资源管理器中)中勾选“允许不安全代码(F)”。 然后再引用中加入:

using System.Runtime.InteropServices;

这是非托管代码类。我们就要用到这个类的Marshal.AllocHGlobal与Marshal.FreeHGlobal。下面用一个例子解释一下用法。例如,在C中有以下语句:

short *a;
a = (short*)malloc(sizeof(short)*SIZE);
//程序内容
free(a);

那么在C#中就要写成:

short* a;
IntPtr ap = Marshal.AllocHGlobal(sizeof(short) * SIZE); //申请非托管指针
a = (short*)ap; //将指针地址传给a
//程序内容
Marshal.FreeHGlobal(ap); //释放指针

这里就是绕了个弯子。我在移植这个程序时想了各种方法,还有类似于建数组然后传[0]的地址的,但是由于.NET有垃圾回收器,而且这个数组的地址会不断的变化,即使使用fixed也还是不尽人意。最后还是推荐大家在C#中尽量不要使用指针。除非用到图片处理这些功能。

//这篇文章写得比较仓促,如果你觉得看不懂或者什么的可以到我微博来找私信我。。。

阅读更多

在Windows Server 2022中安装使用Altstore

1. 正常安装iTunes,iCloud安装版不支持Windows Server,Server虽然能装appx,但是Altstore不支持appx版 2. 在Windows 10/11中安装iCloud,然后将C:\Program Files (x86)\Common Files\Apple中的Apple Application Support和Internet Services拷贝到相同目录 3. Enjoy! 如果仍要使用iCloud,可以手动安装appx,参见https://www.reddit.com/r/sysadmin/comments/sz3zh9/windows_server_icloud_microsoft_store_success/ 参考 https://www.reddit.com/r/jailbreak/comments/rp5buz/tutorial_how_to_

By SkiTiSu

解读iw list命令中valid interface combinations的含义,以及AP+STA实例

直接开讲 想查看网卡能干什么,我们一般使用这个命令: iw list 在每个网卡信息的下方都有这样一段信息 valid interface combinations: * #{ managed } <= 1, #{ AP, mesh point } <= 16, total <= 16, #channels <= 1, STA/AP BI must match, radar detect widths: { 20 MHz (no HT), 20 MHz, 40 MHz, 80 MHz, 80+80 MHz, 160 MHz } 解读一下其中代表的含义: STA(managed)最多开1个,

By SkiTiSu
强刷Netgear M1(MR1100) 4G路由器教程

强刷Netgear M1(MR1100) 4G路由器教程

准备工具 0. M1本体和USB-C数据线 1. 驱动程序 AC78xSDrivers.exe 2. 强刷工具 fdt.exe 3. 需要刷入的固件 xxx.secc.spk 特别注意看清固件文件名的型号跟路由器身上的标签是否一致,固件不一致也能刷入,但是并不会解锁信道,反而可能产生一些稳定性问题。 步骤 1. 安装好驱动程序 2. 拔掉电池,按住电源按钮,插入USB数据线到电脑,这时指示灯会在橙色和蓝色间闪烁,等待屏幕亮起,显示“Downloading software update”,即可松开电源按钮,这时M1已经进入Recovery模式 3. 把固件和fdt放在一个文件夹,按住Shift单击右键,选择“在此处打开命令提示符或PowerShell”,输入以下命令: fdt.exe -f 固件文件名 4. 等待自动刷机,过程约5~10分钟,

By SkiTiSu

解决Win10 1080端口无权限使用的问题

更新到Win10 20H1后,某V字软件竟然一直报错,查看了一下错误信息是 bind: An attempt was made to access a socket in a way forbidden by its access permissions. 经过一番查找,可能是因为开启了Hyper-V导致系统保留了这一段得端口( https://blog.ll00.cn/archives/159.html ),解决方法有两种: 1. 更改端口号 直接将本地监听端口改成一个比较大得或非保留即可,如10800 查看系统保留得端口在cmd中输入netsh interface ipv4 show excludedportrange protocol=tcp 2. 更改系统dynamicport 查看:netsh int ipv4 show

By SkiTiSu
苏ICP备19030749号-1