gpt4 book ai didi

c - 读取和写入内存位置

转载 作者:太空狗 更新时间:2023-10-29 17:26:45 27 4
gpt4 key购买 nike

在谷歌上做了很多研究后,我找到了这个程序:

#include <stdio.h>

int main()
{
int val;
char *a = (char*) 0x1000;
*a = 20;
val = *a;
printf("%d", val);
}

但它在 *a = 20 处抛出运行时错误。

那么我怎样才能写入和读取特定的内存位置呢?

最佳答案

你正在这样做,除了在你的系统上你不能写入这个内存导致段错误。

段错误(通常简称为段错误)、总线错误或访问冲突通常是试图访问 CPU 无法物理寻址的内存。它发生在硬件通知操作系统内存访问冲突时。操作系统内核然后向导致异常的进程发送信号。默认情况下,接收信号的进程转储核心并终止。默认的信号处理程序也可以被覆盖以自定义信号的处理方式。

如果您有兴趣了解更多信息,请在维基百科上查找 MMU。

下面是如何合法地从堆中请求内存。 malloc() 函数将多个字节作为参数进行分配。请注意,每个 malloc() 都应与 free() 调用相匹配,以便在您使用完同一内存后对其进行调用。 free() 调用通常应与您调用 malloc() 的函数位于同一函数中。

#include <stdio.h>
int main()
{
int val;
char *a;

a = (char*)malloc(sizeof(char) * 1);

*a = 20;
val = (int)*a;
printf("%d", val);

free(a);

return 0;
}

你也可以像这样以一种非常简单的方式在栈上分配内存:

#include <stdio.h>
int main()
{
int val;
char *a;
char b;

a = &b;
*a = 20;
val = (int)*a;

printf("%d", val);

return 0;
}

关于c - 读取和写入内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11207783/

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