我是C的新手;我对Java有更多的背景知识。 我想尝试使用指针
在内存中搜索值#include <stdio.h>
void main(){
int value = 10;
find(value);
}
void find(int value){ // will change this to return array of long or int depending on which is better
int* intPointer;
for(int i = 40000; i < 40400 ; i+= 32){ /* not sure if i do it like this or another way,
* the starting value, ending value and condition
* is just for testing purpose */
intPointer = (int*)i;
if(*intPointer == value){
printf("found value"); //will actually be storing it to an array instead
}
}
}
find方法最有可能给我一个分段错误,因为地址不存储int值。有没有办法可以找出存储器地址中存储的类型数据。
有没有更好的方法来完成类似的任务?请解释并显示。实际程序不会有int value = ??
,而只会使用find方法来获取包含此值的地址数组。
另外,存储地址int
或long
的最佳类型是什么?
答案 0 :(得分:2)
有几件事要知道:
find方法最有可能给我一个分段错误,因为地址不存储int值
据我所知,你试图遍历内存地址并找到一个特定的值。从技术上讲,它是可能的,但除了少数罕见的情况之外,几乎没有理由这样做。
不幸的是(为了您的目的)您选择的操作系统处理内存而非智能;它不是仅以线性顺序放置所有内容,而是将(或 segment )内存划分为它们自己的地址空间,以防止进程A的内存干扰进程B的内存,依此类推。为了跟踪哪些进程在内存中,使用映射机制。
您试图访问程序指定段之外的内存。为了能够做你想做的事情,你需要找到一种从操作系统中获取内存映射的方法。
有没有办法可以找出内存地址中存储的类型数据
No,至少不是你想要的方式。 A couple SO answers address this
答案 1 :(得分:1)
无法以通用便携方式执行您尝试的操作。当您访问未分配给您的内存时,代码会生成未定义的行为。
在简单的嵌入式系统上,它是可能的。首先,它需要您对系统内存布局以及编译器的工作方式有充分的了解。例如,您必须知道int
在内存中是否总是4字节对齐,RAM的起始/结束地址。如果MMU存在且处于活动状态,您还需要知道它是如何工作的。
有没有办法可以找出存储器地址中存储的类型数据。
没有
答案 2 :(得分:0)
你正在伪造一个带有循环内部临时var的指针。 搜索值的正确方法是使用两个参数:要搜索的值,以及包含要搜索的值的集合(例如,数组)。