正确的写法:
#include <iostream>
#include <queue>
using namespace std;
struct Test{
int len;
char ch[];
};
void main(){
struct Test *t;
t =( struct Test *) malloc(sizeof *t+2+1);
memcpy(t->ch,"ab",3);
printf("%s\n",t->ch);
return;
错误的写法:
#include <iostream>
#include <queue>
using namespace std;
struct Test{
char ch[];
int len;
};
void main(){
struct Test *t;
t =( struct Test *) malloc(sizeof *t+2+1);
memcpy(t->ch,"ab",3);
printf("%s\n",t->ch);
return;
}
总结:
结构体分配空间是按照顺序来的。也就是说第一个元素必须是确定大小的。
如果要释放数组的空间应该这么写:
free(s-sizeof *t)//s是char *类型;t是struct Test *类型
*t就是结构体的字节大小,s就是结构体里的ch。将ch减去结构体的字节大小,刚好指向整个空间。