开发者社区 问答 正文

为何两个变量无法同时声明时赋给内存地址

我有以下代码,在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进行内存复制,而第二个变量就不行。

这是为什么呢?

展开
收起
a123456678 2016-06-06 19:36:11 1849 分享 版权
1 条回答
写回答
取消 提交回答
  • 要知道,正确的代码一定不会崩溃,但并不代表错误的代码一定会崩溃。
    第一个memcpy能运行不代表你的代码是正确的,你定义了两个指针,但这两个指针都没有指向有效的内存,接下来的memcpy向不知道是什么地方写入了一个字符串,运气好会写到已经从OS申请但一时还没有使用的内存,运气不好会写到一个无效的地址空间导致崩溃,运气再差点,会写到一块其它代码正在使用的内存,尽管这次写入可以运行,但其它的代码就被彻底搞乱了。

    2019-07-17 19:29:19
    赞同 展开评论
问答分类:
问答地址: