c - 内存搜索器功能中毫无根据的段错误

标签 c pointers memory-management segmentation-fault undefined-behavior

我的内存搜索器函数用于在内存中定位字符串“initial”的出现。

volatile unsigned char* ptr;
size_t offset_address;
static char nm [8], idx;

for(ptr = ((volatile unsigned char* )&offset_address); idx <= sizeof("initial") - 1; ptr++)
{
    if(*ptr == *("initial" + idx))
        *(nm + idx) = *ptr, idx++;
    else idx = 0;
}

导致“if(*ptr == *("initial"+ idx)) 访问超出授权内存区域的读取错误”有什么问题? (即使我只增加一次指针也会出错,但如果我根本不增加指针,则不会发生错误)

最佳答案

for 循环中可能存在无限循环,然后 ptr 不断增长。最后,尝试通过 *ptr 引用它会导致错误。

for(ptr = /*...*/; idx <= sizeof("initial") - 1; ptr++) <-- infinite loop if idx=0
{
    if(*ptr == *("initial" + idx))
        *(nm + idx) = *ptr, idx++;
    else idx = 0; <-- always goes here if no matching
}

关于c - 内存搜索器功能中毫无根据的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31846629/

相关文章:

c - 我应该返回函数中的指针以便我可以使用它们吗?例如,我应该返回 table2_entry 吗?

ios - 是否有任何文档/页面详细解释 monotuch 如何处理非托管(NSObject)对象的内存管理/对象生命周期

memory-management - TLB 命中会导致内存缺页吗?

python - python中三维数组的输入

c - 使用 _mm256_load_ps() Intel 内在函数时出错

c - 根据位掩码合并两个位域

c++ - 段错误 C++ 矩阵

c - 指向 C 中数组的指针 : Address Arithmetic and Array Assignment

java - 在java中将大文件的数据缓存在内存中

c - C 结构的良好编码习惯?