malloc函数的问题

时间:2022-04-12 20:49:10
我在开发一个嵌入式的程序,用ARM7,LINUX,C语言,其中在某些时候执行一条语句“content=(unsigned char *)malloc(20*sizeof(unsigned char *));”时死机,谁知道怎么解决这个问题?或者不用malloc函数,有什么别的写法吗?望高手指教!谢谢!

14 个解决方案

#1


mark~~~

确定是malloc的问题么,建议写个干净的helloworld测试一下malloc,个人怀疑应该是你之前的代码导致了内存问题,malloc使这一问题表现出来。

#2


content=(unsigned char *)malloc(20*sizeof(unsigned char ));

#3


我也怀疑是之前的代码导致了内存问题,因为我是在某些特定的操作时会出错,在其他操作同样调用这条语句就没事。但这些不同操作似乎和malloc函数没有太大的关系。例如,某功能需要用户输入数据,如用户输入9字符时一切正常,如用户输入10(所定义的空间足够)字符时,调用上面那条语句就会死机,这是怎么回事?哪位高手能给个建议或者思路?多谢!

#4


jufeng2309真是火眼金睛~~~~~不过似乎只是多分配了空间,应该不会死机吧。

更可能的是内存泄漏,空指针或者野指针的问题。

比如申请了某个单元,没有及时释放,释放了的单元又在后面引用等问题,建议楼主逐段排查,另外,在嵌入式编程中关于内存和指针的使用一定要慎重,必须要养成良好的使用习惯。

#5


这种情况一般都是先分步测试,找出问题所在.

#6


具体可以调试下看看..你申请得到的空间...还有字符需要预留一位给与字符串结束标志.
程序结束后一定要free下你申请的空间!

#7


不是这句的问题, 把上下文贴贴.

#8


首先感谢各位朋友的热心帮助,我在调用malloc前有一个功能就是让用户从前面输入数据(客户编号),用户输入9字符时,后面执行malloc就正常,输入10字符就死机。这个函数是这样的:
int getHuhao(char *buf)
{
int special_key;
POS pos;
ClearScreen();
DispLine(0,"请输入户号:");
pos.x = 8; pos.y = 2;
DispLine(2,"户号:");
GetStrInput(pos, buf, 10, &special_key);//用户输入数据
if(special_key==0)
return 1;//esc返回主菜单
else
return 0;
}
执行malloc的语句是这样的:
unsigned char * getIPOrPort(int category)
{
FILE *fd;
unsigned char Buf[1000]; 
long bRead;
long pEnd;
unsigned char *content;

content=(unsigned char *)malloc(20*sizeof(unsigned char *));//在此死机
if(category==1) fd=fopen("/etc/ip.conf","r");
if(category==2) fd=fopen("/etc/clientport.conf","r");
if(category==3) fd=fopen("/etc/serverip.conf","r");
if(category==4) fd=fopen("/etc/serverport.conf","r");
下面省略。。。。。。
但这两个函数间有几百行代码,高手能否帮我看看,哪里有问题?谢谢!

#9


GetStrInput(pos, buf, 10, &special_key);//用户输入数据 

因为这里的buf长度是10吧~~~~~结尾需要一位结束符,所以只能输9个字符

#10


我也曾把“GetStrInput(pos, buf, 10, &special_key);//用户输入数据  ”中的10改为11,也不行。

#11


  是不是空间不够用了,已经~

#12


如果我不想用malloc函数,把原来的“content=(unsigned char *)malloc(20*sizeof(unsigned char ));”改成“unsigned char content[80];”可以吗?如果这样不对,应该怎么改?谢谢!

#13


只要在一个函数里面问题不大....,指针不好用,用数组也是可以的,
不过灵活性差!
一个是静态的,一个是动态的..不过所在内存位置不一样
一个在栈上,一个在堆上!

#14


一般用栈上的数组,堆上的内存很少。

#1


mark~~~

确定是malloc的问题么,建议写个干净的helloworld测试一下malloc,个人怀疑应该是你之前的代码导致了内存问题,malloc使这一问题表现出来。

#2


content=(unsigned char *)malloc(20*sizeof(unsigned char ));

#3


我也怀疑是之前的代码导致了内存问题,因为我是在某些特定的操作时会出错,在其他操作同样调用这条语句就没事。但这些不同操作似乎和malloc函数没有太大的关系。例如,某功能需要用户输入数据,如用户输入9字符时一切正常,如用户输入10(所定义的空间足够)字符时,调用上面那条语句就会死机,这是怎么回事?哪位高手能给个建议或者思路?多谢!

#4


jufeng2309真是火眼金睛~~~~~不过似乎只是多分配了空间,应该不会死机吧。

更可能的是内存泄漏,空指针或者野指针的问题。

比如申请了某个单元,没有及时释放,释放了的单元又在后面引用等问题,建议楼主逐段排查,另外,在嵌入式编程中关于内存和指针的使用一定要慎重,必须要养成良好的使用习惯。

#5


这种情况一般都是先分步测试,找出问题所在.

#6


具体可以调试下看看..你申请得到的空间...还有字符需要预留一位给与字符串结束标志.
程序结束后一定要free下你申请的空间!

#7


不是这句的问题, 把上下文贴贴.

#8


首先感谢各位朋友的热心帮助,我在调用malloc前有一个功能就是让用户从前面输入数据(客户编号),用户输入9字符时,后面执行malloc就正常,输入10字符就死机。这个函数是这样的:
int getHuhao(char *buf)
{
int special_key;
POS pos;
ClearScreen();
DispLine(0,"请输入户号:");
pos.x = 8; pos.y = 2;
DispLine(2,"户号:");
GetStrInput(pos, buf, 10, &special_key);//用户输入数据
if(special_key==0)
return 1;//esc返回主菜单
else
return 0;
}
执行malloc的语句是这样的:
unsigned char * getIPOrPort(int category)
{
FILE *fd;
unsigned char Buf[1000]; 
long bRead;
long pEnd;
unsigned char *content;

content=(unsigned char *)malloc(20*sizeof(unsigned char *));//在此死机
if(category==1) fd=fopen("/etc/ip.conf","r");
if(category==2) fd=fopen("/etc/clientport.conf","r");
if(category==3) fd=fopen("/etc/serverip.conf","r");
if(category==4) fd=fopen("/etc/serverport.conf","r");
下面省略。。。。。。
但这两个函数间有几百行代码,高手能否帮我看看,哪里有问题?谢谢!

#9


GetStrInput(pos, buf, 10, &special_key);//用户输入数据 

因为这里的buf长度是10吧~~~~~结尾需要一位结束符,所以只能输9个字符

#10


我也曾把“GetStrInput(pos, buf, 10, &special_key);//用户输入数据  ”中的10改为11,也不行。

#11


  是不是空间不够用了,已经~

#12


如果我不想用malloc函数,把原来的“content=(unsigned char *)malloc(20*sizeof(unsigned char ));”改成“unsigned char content[80];”可以吗?如果这样不对,应该怎么改?谢谢!

#13


只要在一个函数里面问题不大....,指针不好用,用数组也是可以的,
不过灵活性差!
一个是静态的,一个是动态的..不过所在内存位置不一样
一个在栈上,一个在堆上!

#14


一般用栈上的数组,堆上的内存很少。