您好,匿名用户
随意问技术百科期待您的加入

php的RETURN_STRINGL为什么使用静态字符串会出现Segmentation fault

0 投票

我的c基础不是很好,还请知道的能详解一下,谢谢

如果我直接使用类似如下的代码,就会出segfault错误

char* ret = "hello world";
RETURN_STRINGL(ret, strlen(ret), 0);

无论ret是直接写字符串,还是先初始化成char[100]这样,都不行

但是只要将程序稍加改进使用动态分配内存就没事:

char* hello = "hello world";
int   len = strlen(hello);
char* ret = (char*)emalloc(len);
memcpy(ret, hello, len);
RETURN_STRINGL(ret, len, 0);

补充一句:后来发现RETURN_STRINGL的第三个参数改成1也不会有越界访问错误了

用户头像 提问 2012年 12月1日 @ Pikachu 上等兵 (475 威望)
分享到:

1个回答

0 投票
 
最佳答案

很明显,这是一个C语言的理解问题,所有函数内的局部变量都是分配在内存中的上的
它是不可控的,由编译器去控制释放的内存区域.一般在函数结束后就被释放掉了.
如果你要分配一块内存共函数外调用,就必须使用类似malloc的函数来显式地分配内存,当然是用完以后你要记得free掉.

用户头像 回复 2012年 12月1日 @ Kassadin 上等兵 (255 威望)
选中 2012年 12月1日 @Pikachu
提一个问题:

相关问题

+2 投票
1 回复 42 阅读
用户头像 提问 2013年 1月11日 @ hadoop 上等兵 (109 威望)
0 投票
0 回复 188 阅读
+2 投票
1 回复 55 阅读
+1 投票
1 回复 34 阅读
0 投票
1 回复 32 阅读
用户头像 提问 2012年 12月1日 @ Blitzcrank 上等兵 (358 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...