c - 故意通过argv获取segmentation fault

标签 c memory memory-management segmentation-fault

我想写一个小程序,当用户通过 argv 输入时,它会出现段错误。我是 C 的新手,但我认为以下代码可以完成这项工作:

int main(int argc, char *argv[])
{
    int bufferSize;
    char * buffer[100];
    unsigned int i;

    if (argc > 1) {
        bufferSize = atoi(argv[1]);
        for (i = 0; i < bufferSize; ++i)
            *( buffer + i ) = i;
    }

    return 0;
}

我的想法是程序初始化(?)一个指向特定大小缓冲区的指针。如果用户然后输入一个大于缓冲区大小的数字,它将写入未初始化的内存,从而获得一个段。过错。这个推理是否正确?

附言。编译时,我得到一个赋值 make pointer from integer without a cast 警告,有人可以告诉我为什么会这样吗?谢谢

最佳答案

据我所知,故意出现段错误的最传统方法是写入 NULL,例如像这样的东西:

*((char *) NULL) = 0;

您可以使用命令行参数作为简单的 bool 值来查看是否应该这样做。

请注意,写入 NULL 实际上并不能保证会导致崩溃,它只是未定义的行为,所以基本上任何事情都可能发生(包括导致 nasal demons )。

警告是因为您有一个指针数组,并尝试将整数分配给数组中的指针。

关于c - 故意通过argv获取segmentation fault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14745329/

相关文章:

c - 函数局部变量在每次调用中的相同地址

c - 函数中的 Malloc 和 free(优化你的内存)

c++ - 内存意识和大数据

c - malloc 中的信号 11 SIGSEGV?

c++ - 如果将 a 类实例声明为 A a,那么 a 类实例将位于内存中的哪个位置?

c - 全局变量(内存绑定(bind))

难道我们不能为#define写一个可执行语句吗?

class - 类成员函数代码内存是分配一次还是在对象的每次实例化时分配?

c - 如何将 `pthread_t` 反向映射(哈希)到结构指针?

c++ - 删除指针内存并确认