发生写入访问冲突时,CLion 不会发出警告

问题描述

我在 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 中没有手持,如果你愿意,你可以用脚射击自己。