gpt4 book ai didi

c - 是什么导致了这个 memset() 中的段错误?

转载 作者:行者123 更新时间:2023-11-30 21:43:06 26 4
gpt4 key购买 nike

所以我知道发生了段错误,但我无法查明其背后的内部逻辑。我相信这是因为在访问指针之前未能初始化它。但是什么会在内存方面触发这个。

前代码:

#include<stdio.h> 

int main(void)
{
memset((char *)0x0, 1, 100); //What causes this to seg fault
printf("HELLO POFTUT.COM \n");
return ;
}

还有什么可能解决这个问题。谢谢。

最佳答案

解决方案是不要写入任意内存位置:-)

更详细地说,C11 标准规定了 * 间接运算符:

The unary * operator denotes indirection. If the operand points to a function, the result is a function designator; if it points to an object, the result is an lvalue designating the object. If the operand has type "pointer to type", the result has type "type". If an invalid value has been assigned to the pointer, the behavior of the unary * operator is undefined.

该段落引用了脚注 102,其中指出:

Among the invalid values for dereferencing a pointer by the unary * operator are a null pointer, an address inappropriately aligned for the type of object pointed to, and the address of an object after the end of its lifetime.

请注意,这不是一个详尽列表,如果您使用 0x01 而不是 NULL,您可能仍然会遇到麻烦 -相当于0x00。除非您知道您的实现允许访问(例如内存映射 I/O 地址),否则您实际上应该只写入您知道存在某种描述的 C 对象的地址。

关于c - 是什么导致了这个 memset() 中的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60143241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com