segmentation-fault 相关问题

访问不属于您的进程的内存时会发生分段错误。使用此标记以及指示语言的标记和指示操作系统的标记。分段错误通常是使用指针变量(通常包含无效地址)或缓冲区溢出的解除引用操作的结果。无效指针值的根本原因可能是远离产生分段错误的位置。

在 range-for 循环的一个表达式中调用两个函数时出现段错误 C++

我有一个大程序,它与以下代码的迷你版本完全相同: #包括 #包括 #包括 使用命名空间 std; 地图 我有一个大程序,它与以下代码的迷你版本完全相同: #include <iostream> #include <map> #include <set> using namespace std; map<int,set<size_t>> getMap(void) { return map<int,set<size_t>>{ {1,{2,3,4,5}}, {2,{3,4,5,6}} }; } int getIndex(void) { return 1; } int main(void) { for (const size_t &n: getMap()[getIndex()]) cout << n << endl; return 0; } 我得到的结果是分段错误。我在这里犯了错误,但不知道错误到底在哪里。 getMap()[getIndex()])是我认为错误的表达方式。但我相信表达式应该返回一个容器set<size_t>,我可以迭代它。 有人可以解释为什么在一个表达式中调用这些函数会在上述代码中产生分段错误吗?我是否尝试访问不应该访问的内容?或者我错过了编译器在处理这样的表达式时的行为? 您的 getMap 函数返回映射的实例,但在基于范围的 for 循环中,: 右侧的实体必须在整个循环运行过程中持续存在。 在您的情况下,getMap()返回的地图将不再存在于第二次迭代中。 解决方法是将 getMap() 的返回值分配给一个变量,该变量将保留在基于范围的 for 范围内: int main(void) { auto m = getMap()[getIndex()]; // assign to a variable that will not be destroyed. for (const size_t &n : m) cout << n << endl; return 0; } 实例

回答 1 投票 0

创建一个程序,将所有环境变量以小写形式复制到新的 char** 缓冲区中并打印它们

我有一个任务(用于练习 c)将 envp 以小写形式复制到新的 char** 缓冲区中并打印它们。 我编写了一个程序,由于某种原因,它一直给我分段错误。 #包括 我有一个任务(用于练习 c)将 envp 以小写形式复制到新的 char** 缓冲区中并打印它们。 我编写了一个程序,由于某种原因,它一直给我分段错误。 #include <ctype.h> #include <stdlib.h> #include <stdio.h> int main( int argc, char **argv, char **envp) { int i = 0; char **envp = (char **) malloc(sizeof(environ)); char **envp_cpy = envp; char *temp; for(i = 0; environ[i] != NULL; i++) { temp = environ[i]; while(*temp != '\0') { **envp_cpy = tolower(*temp); *envp_cpy++; *temp++; } *envp_cpy++; } for (i = 0; envp[i] != NULL; i++) { printf("%s\n",envp[i]); } free(envp); return 0; } char **envp = (char **) malloc(sizeof(environ))在我的系统上分配了8个字节,这是一个指针的大小。这意味着 **envp_cpy = tolower(*temp); 是缓冲区溢出,并且它对我来说是 NULL 的段错误。

回答 1 投票 0

QApplication::style()->pixelMetric(QStyle::PM_TextCursorWidth)中的分段错误

我尝试查询当前应用程序样式的pixelMetric,但在以下代码行中出现分段错误: #包括 int main(int argc, char* argv[]) {

回答 1 投票 0

检测分配块上内存的意外使用的方法?

我有一个数据结构,出于性能原因分配连续的内存块。 但后来,这块内存中出现了一些漏洞,这些漏洞将不会被使用、初始化或触及。 因为它非常

回答 1 投票 0

CS50模糊功能仅正确计算中间像素+段错误

//图像模糊 无效模糊(int高度,int宽度,RGBTRIPLE图像[高度][宽度]) { RGBTRIPLE 模糊[高度][宽度]; 整数 i = 0; 整数 j = 0; int 求和; 国际苏格林; int sumblu...

回答 1 投票 0

CSAPP Attack Lab Phase1 Ubuntu22.04 上的分段故障

我是一名初学者,最近在Ubuntu22.04上进行CSAPP攻击实验室工作。 我下载文件并在终端中运行 ctarget, ./c目标 通常,CTARGET 预计会接收标准输入作为代码注入,...

回答 1 投票 0

为什么 fopen 打不开现有文件? (返回 NULL,错误号 ENOENT)

我发布此内容是为了记录我的问题,请参阅下面的我的自我回答。 无论我如何尝试,fopen(...) 都无法打开存在路径处的现有文件并返回 NULL。我正在执行程序...

回答 2 投票 0

获取字符串切片时出现未知字符然后出现段错误

我遇到了一个非常奇怪的问题。我相信这与字符串切片有关,但我什至很难找到我的错误。 我的代码如下: char * readSlice (char * buf, int pos, int len) { ...

回答 1 投票 0

简单循环中无法解释的分段错误,适用于两个 if 语句,但不适用于三个?

发生了很多事情,所以我在 add 函数中放置了一些指向 if 语句的箭头,这些箭头破坏了代码。当我只使用 2/3 的 if 语句测试代码时,我需要

回答 1 投票 0

在c中使用两个队列创建堆栈,出队不起作用

所以我在 CLang 中使用两个队列创建一个堆栈 我得到了 enqueue dequeue 和 printQueue。 不幸的是,我的一个队列的出队无法正常工作,下面是我写的......

回答 1 投票 0

我一直致力于解决 Nasm asm 代码第 32 位的分段错误

我对asm编程很陌生。我一直在尝试解决一些任务作为学习的方式。其中两个任务运行良好,但两个任务因分段错误而失败。我经历了很多

回答 1 投票 0

C 中使用 pthreads 和 sscanf 的分段错误

由于事务方法中的第一个 sscanf 语句,我遇到了分段错误。我不确定为什么会发生这种情况。我尝试更改 sscanf 语句和变量,但是......

回答 1 投票 0

尝试在指针内写入数据时出现分段错误异常

我遇到异常:第 54 行出现分段错误,我在该行输入了品牌名称。 C语言。我正在使用带有 C/C++ 编译运行扩展的 VScode。 做 { printf("输入br...

回答 1 投票 0

mysql_real_connect 给出分段错误 - C++

我正在尝试构建一个队列处理器,它从 mysql 获取任务作业,并且我需要 mysql 连接器变量是全局的,因为我需要在多个函数中使用它。这是代码: ... ...

回答 2 投票 0

获取 Windows 命令提示符以报告访问冲突

在 Linux 中,如果我从终端运行应用程序并且存在段错误,那么我会看到一条错误消息。但在 Windows 中,如果我在命令提示符下运行(命令行)应用程序并且存在访问冲突,我...

回答 1 投票 0

从链表中删除项目会导致分段错误,因为稍后会引用释放的内存

我正在开发一款简单的游戏,其功能是射击小行星会产生 2 个较小的小行星。 当我删除一颗被击中的小行星,然后尝试添加 2 个新小行星时,我遇到了问题。 她...

回答 1 投票 0

argp_parse 段错误

我正在尝试开发一个模拟 6502 微处理器的项目,为此我希望获得一个可以使用多个命令行参数从命令行启动的 GUI。我正在使用...

回答 1 投票 0

对结构体数组进行合并排序

我正在尝试对结构数组进行合并排序,我遇到了许多不同的段错误,但目前它发生在 arrayCopy 函数中: void arrayCopy(item10array dest[], item10array src[], cons...

回答 1 投票 0

插入最后一个元素时出现SkipList分段错误

我开发了一个带有void指针的SkipList,并以概率方式设置它的最大级别。 这些是我的结构: #包括 #包括 #包括

回答 1 投票 0

为什么向容量为 128 的缓冲区发送 127 个字符时出现“分段错误”

我从这里获取了以下代码: #包括 #包括 #包括 #包括 #定义横幅\ “欢迎来到”LEVELNA...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.