我有以下代码,在XCode中编译通过,在运行时发生错误,
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main ()
{
char* src;
char* dest;
memcpy(src, "This is source", 15);
memcpy(dest, "This is destination", 20);
}
src可以成功获得地址并成功通过memcpy赋值,但是dest在声明后并没有获得内存地址,并在memcpy时出错。
排除需要malloc的原因,为什么我没有使用malloc也可以对src进行内存复制,而第二个变量就不行。
这是为什么呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要知道,正确的代码一定不会崩溃,但并不代表错误的代码一定会崩溃。
第一个memcpy能运行不代表你的代码是正确的,你定义了两个指针,但这两个指针都没有指向有效的内存,接下来的memcpy向不知道是什么地方写入了一个字符串,运气好会写到已经从OS申请但一时还没有使用的内存,运气不好会写到一个无效的地址空间导致崩溃,运气再差点,会写到一块其它代码正在使用的内存,尽管这次写入可以运行,但其它的代码就被彻底搞乱了。