【发布时间】:2016-11-29 02:39:12
【问题描述】:
我是 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 的最佳类型是什么?
【问题讨论】:
-
您可以调用未定义的行为。结果将取决于系统,如果操作系统禁止访问该地址,则访问该地址将导致您的程序被操作系统杀死。您编写了
void main(),因此您可能希望在微控制器等独立环境中执行此代码(但那里可能不支持printf())。请注意,无论如何使用未声明的函数都是不好的。 -
您正在访问未分配的内存:这是 C/C++ 中未定义的行为,因此您无法以这种方式检查内存。顺便说一句,int 的大小取决于实现:您应该使用
sizeof(int)*8而不是 32 来增加循环。你为什么要在第一时间这样做?也许我们可以为您提供其他方式 -
存储地址的最佳类型是指针(指向适当的类型)。
int和long可能有也可能没有兼容的表示和足够的大小。 -
你的问题有很多问题,我什至不知道从哪里开始。这不是记忆的工作方式。您遇到了段错误,因为您访问了您无权访问的内存。
-
@MikeCAT 我不知道 void 或返回 0 有很大的不同,我对 C 完全陌生,我只是在尝试一个带有指针的简单应用程序。
标签: c pointers memory-address