今天在程序中出现一个bug,找了很久,最后才发现了问题。原来是Sndmsg类中有一个成员变量terminal,其类型字符数组(string[])。每次生成类的实例的时候,我都是直接用sndmsg.terminal = xxx 来赋值,没有想到这样的结果是 操作系统根本不为这个类的实例分配字符数组,而是指向了xxx。 这样的结果可想而知,所有类的实例的这个成员变量都指向了最后一个输入的字符数组。
正确的做法是,先为这个实例的这个成员变量分配内存,然后copy。
sndmsg.terminal = new string[xxx.length];
Arry.copy(xxx, terminal, xxx.length);