为什么这不会返回分段错误11?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
    char *test;
    test = (char*) (malloc(sizeof(char)*3));
    test = "foo";
    printf("%s\n", test);
    test = "foobar";
    printf("%s\n", test);
    return 0;
}
我的结果是
foo
foobar
我是C的新手,但是当我使用Mac上的gcc和Windows 10上的Windows Debugger进行编译时,它并没有像我预期的那样崩溃.
我的理解是,通过使用(char*) (malloc(sizeof(char)*3)),我正在创建一个长度为3的字符数组.然后,当我将测试分配给字符串foobar时,我正在写入6个数组位置.
我坐在这里,盯着我看似有效,可运行的代码,摸不着头脑.
test = "foo";
在这里,您不会将字符串复制到已分配的内存,test不再指向已分配的内存,而是指向字符串文字"foo".同样如此"foobar".同样如注释中所指出的,分配的内存的地址丢失,因此它是内存泄漏(因为无法检索内存的地址).
如果要将字符串复制到另一个目标,则需要使用strcpy或循环遍历每个字符.
如果您编写或读取已分配空间的外部边界,则调用未定义的行为.这意味着基本上所有事情都可能发生,而且它也有效.
| 归档时间: | 
 | 
| 查看次数: | 129 次 | 
| 最近记录: |