问题描述
我在 Windows 中的 CLion 和 Cygwin 工具链(gcc 和 gdb)中运行此 C 代码,我尝试写入未分配的 str[5]:
#include <stdio.h>
#include "stdlib.h"
int main() {
char * str = malloc(4);
str[5] = 'a';
printf("%c\n",str[5]);
return 0;
}
但是,它运行时没有任何错误(我期待获得内存访问冲突和我没有释放分配的指针的警告)。
这是 CMakeLists.txt 的配置方式(我刚刚添加了 CMAKE_C_FLAGS 行):
cmake_minimum_required(VERSION 3.17)
project(myproject C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror")
add_executable(myproject main.c)
解决方法
您不能访问未分配的内存。同时,您的编译器/运行时不需要阻止您这样做。
C 中没有手持,如果你愿意,你可以用脚射击自己。