14 个解决方案
#1
mark~~~
确定是malloc的问题么,建议写个干净的helloworld测试一下malloc,个人怀疑应该是你之前的代码导致了内存问题,malloc使这一问题表现出来。
确定是malloc的问题么,建议写个干净的helloworld测试一下malloc,个人怀疑应该是你之前的代码导致了内存问题,malloc使这一问题表现出来。
#2
content=(unsigned char *)malloc(20*sizeof(unsigned char ));
#3
我也怀疑是之前的代码导致了内存问题,因为我是在某些特定的操作时会出错,在其他操作同样调用这条语句就没事。但这些不同操作似乎和malloc函数没有太大的关系。例如,某功能需要用户输入数据,如用户输入9字符时一切正常,如用户输入10(所定义的空间足够)字符时,调用上面那条语句就会死机,这是怎么回事?哪位高手能给个建议或者思路?多谢!
#4
jufeng2309真是火眼金睛~~~~~不过似乎只是多分配了空间,应该不会死机吧。
更可能的是内存泄漏,空指针或者野指针的问题。
比如申请了某个单元,没有及时释放,释放了的单元又在后面引用等问题,建议楼主逐段排查,另外,在嵌入式编程中关于内存和指针的使用一定要慎重,必须要养成良好的使用习惯。
更可能的是内存泄漏,空指针或者野指针的问题。
比如申请了某个单元,没有及时释放,释放了的单元又在后面引用等问题,建议楼主逐段排查,另外,在嵌入式编程中关于内存和指针的使用一定要慎重,必须要养成良好的使用习惯。
#5
这种情况一般都是先分步测试,找出问题所在.
#6
具体可以调试下看看..你申请得到的空间...还有字符需要预留一位给与字符串结束标志.
程序结束后一定要free下你申请的空间!
程序结束后一定要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");
下面省略。。。。。。
但这两个函数间有几百行代码,高手能否帮我看看,哪里有问题?谢谢!
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个字符
因为这里的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使这一问题表现出来。
确定是malloc的问题么,建议写个干净的helloworld测试一下malloc,个人怀疑应该是你之前的代码导致了内存问题,malloc使这一问题表现出来。
#2
content=(unsigned char *)malloc(20*sizeof(unsigned char ));
#3
我也怀疑是之前的代码导致了内存问题,因为我是在某些特定的操作时会出错,在其他操作同样调用这条语句就没事。但这些不同操作似乎和malloc函数没有太大的关系。例如,某功能需要用户输入数据,如用户输入9字符时一切正常,如用户输入10(所定义的空间足够)字符时,调用上面那条语句就会死机,这是怎么回事?哪位高手能给个建议或者思路?多谢!
#4
jufeng2309真是火眼金睛~~~~~不过似乎只是多分配了空间,应该不会死机吧。
更可能的是内存泄漏,空指针或者野指针的问题。
比如申请了某个单元,没有及时释放,释放了的单元又在后面引用等问题,建议楼主逐段排查,另外,在嵌入式编程中关于内存和指针的使用一定要慎重,必须要养成良好的使用习惯。
更可能的是内存泄漏,空指针或者野指针的问题。
比如申请了某个单元,没有及时释放,释放了的单元又在后面引用等问题,建议楼主逐段排查,另外,在嵌入式编程中关于内存和指针的使用一定要慎重,必须要养成良好的使用习惯。
#5
这种情况一般都是先分步测试,找出问题所在.
#6
具体可以调试下看看..你申请得到的空间...还有字符需要预留一位给与字符串结束标志.
程序结束后一定要free下你申请的空间!
程序结束后一定要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");
下面省略。。。。。。
但这两个函数间有几百行代码,高手能否帮我看看,哪里有问题?谢谢!
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个字符
因为这里的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
一般用栈上的数组,堆上的内存很少。