user-0 提问: 求教memset报错，谢谢

回复:
user: user-1
content: 对不起，我搞错了，你的是二维数组

user: user-1
content: 我认为你的malloc是为了保存100行记录，应该乘上ROWS，否则，你申请的内存大小只能存放一条记录

user: user-2
content: 引用 10 楼 startstop2015 的回复:[quote=引用 9 楼 q3733353520 的回复:] [quote=引用 8 楼 startstop2015 的回复:] [quote=引用 5 楼 u012033027 的回复:] 你用了ROWS*的时候，分配的可视为一个元素为struct_emp的数组，没有ROWS*的时候，分配的是一个元素。 都可以的，看你怎么用了。 你的意思是两种写法都是正确的？[/quote]   array_emp=(struct struct_emp *)malloc(ROWS*sizeof(struct struct_emp));  memset(array_emp,0,ROWS*sizeof(struct struct_emp));//就是不该加&   如果你的malloc用了ROWS*，那么你的memset也要用ROWS* 我看你的结构体里面的成员是个大小100的数组，按你的意思应该是2个都可以不加[/quote] 我只要申请够用的内存即可，也就是保存100行的内存，到底该怎么写啊？[/quote]  引用 10 楼 startstop2015 的回复:[quote=引用 9 楼 q3733353520 的回复:] [quote=引用 8 楼 startstop2015 的回复:] [quote=引用 5 楼 u012033027 的回复:] 你用了ROWS*的时候，分配的可视为一个元素为struct_emp的数组，没有ROWS*的时候，分配的是一个元素。 都可以的，看你怎么用了。 你的意思是两种写法都是正确的？[/quote]   array_emp=(struct struct_emp *)malloc(ROWS*sizeof(struct struct_emp));  memset(array_emp,0,ROWS*sizeof(struct struct_emp));//就是不该加&   如果你的malloc用了ROWS*，那么你的memset也要用ROWS* 我看你的结构体里面的成员是个大小100的数组，按你的意思应该是2个都可以不加[/quote] 我只要申请够用的内存即可，也就是保存100行的内存，到底该怎么写啊？[/quote]    array_emp=(struct struct_emp *)malloc(sizeof(struct struct_emp));  memset(array_emp,0, sizeof(struct struct_emp));//就是不该加&

user: user-0
content: 引用 9 楼 q3733353520 的回复:[quote=引用 8 楼 startstop2015 的回复:] [quote=引用 5 楼 u012033027 的回复:] 你用了ROWS*的时候，分配的可视为一个元素为struct_emp的数组，没有ROWS*的时候，分配的是一个元素。 都可以的，看你怎么用了。 你的意思是两种写法都是正确的？[/quote]   array_emp=(struct struct_emp *)malloc(ROWS*sizeof(struct struct_emp));  memset(array_emp,0,ROWS*sizeof(struct struct_emp));//就是不该加&   如果你的malloc用了ROWS*，那么你的memset也要用ROWS* 我看你的结构体里面的成员是个大小100的数组，按你的意思应该是2个都可以不加[/quote] 我只要申请够用的内存即可，也就是保存100行的内存，到底该怎么写啊？

user: user-2
content: 引用 8 楼 startstop2015 的回复:[quote=引用 5 楼 u012033027 的回复:] 你用了ROWS*的时候，分配的可视为一个元素为struct_emp的数组，没有ROWS*的时候，分配的是一个元素。 都可以的，看你怎么用了。 你的意思是两种写法都是正确的？[/quote]   array_emp=(struct struct_emp *)malloc(ROWS*sizeof(struct struct_emp));  memset(array_emp,0,ROWS*sizeof(struct struct_emp));//就是不该加&   如果你的malloc用了ROWS*，那么你的memset也要用ROWS* 我看你的结构体里面的成员是个大小100的数组，按你的意思应该是2个都可以不加

user: user-0
content: 引用 5 楼 u012033027 的回复:你用了ROWS*的时候，分配的可视为一个元素为struct_emp的数组，没有ROWS*的时候，分配的是一个元素。 都可以的，看你怎么用了。 你的意思是两种写法都是正确的？

user: user-3
content: 费那事！ array_emp=(struct struct_emp *)calloc(1,sizeof(struct struct_emp));

user: user-4
content: 你用了ROWS*的时候，分配的可视为一个元素为struct_emp的数组，没有ROWS*的时候，分配的是一个元素。 都可以的，看你怎么用了。

user: user-0
content: 引用 3 楼 u012033027 的回复:malloc是正确的。 memset的第一个参数确实应该是指针，但是array_emp本身就是一个指向了分配空间的指针，直接使用就可以了。如果在使用取地址操作&，反而不对，不是指向刚才malloc所分配的空间的。 谢谢，我这样malloc貌似是错的，而不是你说的是正确的 struct struct_emp {   char  name[ROWS][10];   float salary[ROWS]; };  int main(int argc,char* argv[]) {   struct struct_emp *array_emp;   array_emp=(struct struct_emp *)malloc(ROWS*sizeof(struct struct_emp));   这个地方array_emp=(struct struct_emp *)malloc(ROWS*sizeof(struct struct_emp));  似乎不应该有ROWS*了  memset你说的我不是很懂，心里没底

user: user-4
content: malloc是正确的。 memset的第一个参数确实应该是指针，但是array_emp本身就是一个指向了分配空间的指针，直接使用就可以了。如果在使用取地址操作&，反而不对，不是指向刚才malloc所分配的空间的。

user: user-0
content: 引用 1 楼 u012033027 的回复:memset(&array_emp,0,ROWS*sizeof(struct struct_emp)); 改为 memset(array_emp,0,ROWS*sizeof(struct struct_emp)); 试试看。 谢谢，为什么这样改？不都是&XX这样写的吗？ 我现在还不确定的malloc是否正确

user: user-4
content: memset(&array_emp,0,ROWS*sizeof(struct struct_emp)); 改为 memset(array_emp,0,ROWS*sizeof(struct struct_emp)); 试试看。