求教memset报错,谢谢

startstop2015 2015-09-09 10:01:30

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include <sqlca.h>
#define ROWS 100

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));
if (NULL==array_emp)
{
printf("Can not mallocation!\n");
return 1;
}
else
{
//想要清空这个结构体数组,编译通过,执行报错Segmentation fault (core dumped)
memset(&array_emp,0,ROWS*sizeof(struct struct_emp));
}
free(array_emp);
return 0;
}

求教:
1、如上代码。malloc和memset是否有错?
2、malloc是为了申请用来保存100行记录的内存
这样定义结构体,malloc到底该怎么写
array_emp=(struct struct_emp *)malloc(ROWS*sizeof(struct struct_emp)); ?
还是
array_emp=(struct struct_emp *)malloc(sizeof(struct struct_emp)); ?
3、memset是为了清空用来清空保存100行记录的内存数据
4、编译可以通过,执行报错Segmentation fault (core dumped)
...全文
247 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
金木dream 2015-09-10
  • 打赏
  • 举报
回复
对不起,我搞错了,你的是二维数组
金木dream 2015-09-10
  • 打赏
  • 举报
回复
我认为你的malloc是为了保存100行记录,应该乘上ROWS,否则,你申请的内存大小只能存放一条记录
  • 打赏
  • 举报
回复
引用 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));//就是不该加&
startstop2015 2015-09-10
  • 打赏
  • 举报
回复
引用 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行的内存,到底该怎么写啊?
  • 打赏
  • 举报
回复
引用 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个都可以不加
startstop2015 2015-09-10
  • 打赏
  • 举报
回复
引用 5 楼 u012033027 的回复:
你用了ROWS*的时候,分配的可视为一个元素为struct_emp的数组,没有ROWS*的时候,分配的是一个元素。 都可以的,看你怎么用了。
你的意思是两种写法都是正确的?
赵4老师 2015-09-10
  • 打赏
  • 举报
回复
费那事!
array_emp=(struct struct_emp *)calloc(1,sizeof(struct struct_emp));
softee 2015-09-09
  • 打赏
  • 举报
回复
你用了ROWS*的时候,分配的可视为一个元素为struct_emp的数组,没有ROWS*的时候,分配的是一个元素。 都可以的,看你怎么用了。
startstop2015 2015-09-09
  • 打赏
  • 举报
回复
引用 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你说的我不是很懂,心里没底
softee 2015-09-09
  • 打赏
  • 举报
回复
malloc是正确的。 memset的第一个参数确实应该是指针,但是array_emp本身就是一个指向了分配空间的指针,直接使用就可以了。如果在使用取地址操作&,反而不对,不是指向刚才malloc所分配的空间的。
startstop2015 2015-09-09
  • 打赏
  • 举报
回复
引用 1 楼 u012033027 的回复:
memset(&array_emp,0,ROWS*sizeof(struct struct_emp)); 改为 memset(array_emp,0,ROWS*sizeof(struct struct_emp)); 试试看。
谢谢,为什么这样改?不都是&XX这样写的吗? 我现在还不确定的malloc是否正确
softee 2015-09-09
  • 打赏
  • 举报
回复
memset(&array_emp,0,ROWS*sizeof(struct struct_emp)); 改为 memset(array_emp,0,ROWS*sizeof(struct struct_emp)); 试试看。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧