C中未定义的代码块行为(调试模式)会损坏我电脑上的文件吗?

C中未定义的代码块行为(调试模式)会损坏我电脑上的文件吗?,c,undefined-behavior,C,Undefined Behavior,我的问题是:在代码块上以调试模式运行的C程序是否可能删除我计算机上的重要数据?就像更改指针的值而不是它指向的值,然后取消引用它时一样未定义的行为是未定义的。它可以做奇怪的事情 理论上,它可以损坏任何内存位置。副作用范围从可忽略到灾难性的行动 阅读这篇维基文章。这完全取决于你的代码做什么以及你所指的是什么样的未定义行为。这样的代码理论上可能会损坏计算机上的文件: char* garbage; // not initialized FILE* fp = fopen(garbage, "w"); fp

我的问题是:在代码块上以调试模式运行的C程序是否可能删除我计算机上的重要数据?就像更改指针的值而不是它指向的值,然后取消引用它时一样

未定义的行为是未定义的。它可以做奇怪的事情

理论上,它可以损坏任何内存位置。副作用范围从可忽略到灾难性的行动


阅读这篇维基文章。

这完全取决于你的代码做什么以及你所指的是什么样的未定义行为。这样的代码理论上可能会损坏计算机上的文件:

char* garbage; // not initialized
FILE* fp = fopen(garbage, "w");
fprintf(fp, "hello");

理论上!?UB行为意味着可以运行恶意代码。实际上指针不会指向你的硬盘。所以,如果您写入内存位置,即使是未指定的位置,也不会损坏您的文件。@StoryTeller我想您是想在我的答案下发布它,对吧?@SouravGhosh-不太可能。OP似乎担心他们的文件会丢失。我试图让他们放心,文件系统与由于UB和删除文件而被调用的进程恶意代码的内存空间是分开的。@StoryTeller,如果我更改了中央内存中内存地址的值,而这恰好是在硬盘上执行输出操作的有效指令我想这也是可能的,对吧?@MatSiv97-你在托管环境中吗?操作系统是用来保护你免受这种事情的。如果您可以直接且不受限制地访问内存,则所有赌注都将被取消。