这段代码不应该给出段错误,因为我只有 malloc'ed 1 字节的字符吗?[复制]

Shouldn't this code give a segment fault since I have only malloc'ed 1 byte of char? [duplicate]

提问人:Cardinal 提问时间:10/27/2022 更新时间:10/27/2022 访问量:25

问:

这里是 C 的新手。正在尝试strcat,并认为我的代码应该出错,但它工作正常。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[]){
    char string[] = "string!";
    char* concat = (char*)malloc(sizeof(char));
    strcat(concat,string);
    printf("%s\n", concat);
    free(concat);
}

事实上,我能够访问内存,就像应该抛出错误一样,对吧?printf("%c\n", *(concat +1232));

我正在尝试字符串函数,看看做什么会给我带来什么错误。我以为上面的代码会给出错误,但事实并非如此。我对strcat的理解错了吗?

c 字符串 char malloc 动态内存分配

评论

1赞 Cheatah 10/27/2022
未定义的行为是未定义的。你不应该期待任何事情。
1赞 Some programmer dude 10/27/2022
任何像样的学习资源都应该告诉你,C语言没有任何边界检查。越界会导致未定义的行为。作为程序员,你有责任确保你的程序不会越界。
0赞 Weather Vane 10/27/2022
只有当您访问不拥有的内存时,或者通过损坏您拥有的东西,才会出现段错误,然后行为不端,导致非法内存访问,这是您创建的错误的副作用。除了硬件陷阱之外,除了运行调试工具之外,没有“内存警察”。

答: 暂无答案