malloc函数的问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 09:21:27
我在开发一个嵌入式的程序,用ARM7,LINUX,C语言,其中在某些时候执行一条语句“content=(unsigned char *)malloc(20*sizeof(unsigned char *));”时死机,谁知道怎么解决这个问题?或者不用malloc函数,有什么别的写法吗?望高手指教!谢谢!
如果我不想用malloc函数,把原来的“content=(unsigned char *)malloc(20*sizeof(unsigned char ));”改成“unsigned char content[80];”可以吗?如果这样不对,应该怎么改?谢谢!gzlu朋友,我写成“content=(unsigned char *)malloc(20*sizeof(unsigned char));”同样死机,能再具体一点解释为什么不能用“unsigned char content[80]”替换吗?我本来就是在某一函数中声明content,退出当前函数之后就不能再使用了,且此数组并不大,我觉得定长也未尝不可,但不知为何执行的不对。
真的是非常感谢几位朋友能够热心回答我的问题,怎么查看编译选项?

arm7跑linux还是不太现实的,死机也是不奇怪的

改成:content=(unsigned char *)malloc(20*sizeof(unsigned char));

如果改成数组unsigned char content[80]的话,空间将由栈中分配,而且退出当前函数之后就会被释放,不能再使用了。

这样不能使用的话,请检查你为程序预留的栈空间大小(在编译选项里面)。如果栈溢出的话是肯定会死机的。

另外如果你的这个函数不会重入的话(即没有退出就又在另一线程中调节或者被递归调用),也可以使用static unsigned char content[80],这样就不会占栈空间了。

你要分配20个指针吗??? 应该没问题的.
=========================================
可以改成数组, 不过这样大小就必须确定, 无法动态改变了.
对于大数组, 我建议用malloc, 不然太浪费空间了.
当然, 对于嵌入式程序不知道有没有这个必要.
=========================================
先做个测试, 定义一个小数组, 比如大小为10, 5, 3
看看还死机吗?