gpt4 book ai didi

c - 调用 size_t *size as *z 时读取访问冲突

转载 作者:行者123 更新时间:2023-11-30 20:58:10 25 4
gpt4 key购买 nike

通常我会写很长的文字,但这个问题相当简单。我目前正在研究一些 Python C API 的东西,需要将 python 整数解析为 size_t* 类型。如果没有给出整数,我希望大小默认为 sizeof(int) 但会出现错误。以下最小示例显示了我的问题:

#include <stdio.h>

int main() {
size_t *size = (size_t*)sizeof(int);
fprintf(stdout, "size is: %zu\n", *size);
}

除了“读取访问冲突错误”之外,有人可以向我解释一下这里发生了什么吗?

最佳答案

what is going on here other than "Read access violation error"?

我的猜测:

size_t *size = (size_t*)sizeof(int);
^^^^^^ 1
------^^^^^ 2
^^^^^^^^^ 3

// 1) sizeof() returns byte count in an unsigned integral type
// 2) sizeof(int) is 4 or 8 depending on compiler and target system

// For diagnostic, I added:
fprintf(stdout, "\n lu int size: %lu\n", sizeof(int));
// on my lubuntu 18.04 desktop, this line reports: " lu int size: 4"

// 3) (size_t*) is a c-style cast of the value of sizeof(int)
// fprintf(stdout, "\n size is: %zu\n", *size);

// g++ reports format ‘%zu’ expects argument of type ‘size_t’
//
// Running your printf on my lubuntu gives a "3403 Segmentation fault"
// with core dump.
<小时/>

摘要:我认为“发生了什么”是您正在尝试访问地址 0x00000008 在你的系统中,这显然是不允许的。

您的系统(编译器/操作系统/硬件)是否允许访问地址 0x00000008 ?许多嵌入式系统没有。

这真的是你想做的事吗? (即从从 int 的大小派生的地址(可能是 0x00000008)读取 int)

<小时/>

实验:

您可能会尝试使用其他技术读取该地址... int?字节?炭?访问

<小时/>

可能的根本原因:

也许您的操作系统需要特殊权限才能访问进程/任务。

也许您的硬件在该位置没有内存

关于c - 调用 size_t *size as *z 时读取访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53747104/

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