一、先规定一下"看清楚"的标准
1.1 三个必须分清的概念
读内存问题,最容易混淆的是下面这三样东西。它们在语言里长得像,在内存里完全是三码事。
| 概念 | 是什么 | 谁负责它的生死 |
|---|---|---|
| 地址 | 一个指向某处的数字 | 谁创建指针,谁决定它还指向谁 |
| 内容 | 地址指向的那些字节 | 内容属于"编码 + 缓冲区"两件事 |
| 所有权 | 谁有权利释放这块内存 | 必须显式约定,通常写在接口注释里 |
绝大多数跨语言字符串事故,都是第三件事没约定导致的:地址传过去了、内容也对了,但释放时用错了分配器。
1.2 一次调用的完整链路
我们要追踪的调用长这样:
[DllImport("NativePlugin", CharSet = CharSet.Ansi)] static extern int SetPlayerName(string n