小编Ted*_*gmo的帖子

编程接收到的信号SIGSEGV,在代码块中调试时出现分段错误

我是C ++的初学者,我正在尝试解决https://projecteuler.net/problem=9。我为此写了一个代码,它显示了错误-程序收到信号SIGSEGV,分段错误。在调试时在strcmp()(C:\ Windows \ syswow64 \ msvcrt.dll)中。

如果我直接运行该程序,则会出现一个对话框,显示“ Windows正在检查解决方案”。

我试过不使用字符串函数,而不是写pytha(a,b,c)==“ true”,我只是写了axa + bxb = c * c(我写了*而不是x,但是这里没有显示*在两个a之间,因此我将其替换为x),并且代码运行正常。但问题是为什么它不能与字符串函数一起使用?

我没有看到代码有什么问题。

我发现了很多类似的问题-1. https://www.codeproject.com/Questions/93770/what-is-this-means-Program-received-signal-SIGSEGV
根据这一点,我的程序是指它无权访问的内存位置。但是我看不到任何限制此代码访问某些内容的东西。

  1. 程序收到信号SIGSEGV,分段故障错误

3. 调试---编程接收到的信号SIGSEGV,分段错误

  1. 程序收到信号SIGSEGV,分段错误

  2. “程序收到信号SIGSEGV,分段故障。”

  3. 程序收到信号SIGSEGV,分段故障

  4. 程序收到信号SIGSEGV,分段故障,链表程序

他们中没有一个回答我的查询,因为我无法将其中提到的代码与我的代码相关联。编号为5的链接提到该错误可能是由于涉及大量计算。即使我对我的代码也有疑问,但是当我不使用“ pytha”函数时,它可以很好地工作。另外,我看不到涉及与内存访问相关的错误的大量步骤。

同样,即使是涉及大量步骤的原因,程序也应在有足够时间的情况下进行编译。但事实并非如此。它清楚地显示了“ Windows正在寻找解决方案”的错误。

#include <cmath>
#include <iostream>
#include <string>

using namespace std;

string pytha(int a, int b, int c) {
    if(a * a + b * b == c * c) return "true";
}

int main() {
    for(int a = 1; a < 1000; a++) {
        for(int b = …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
40
查看次数

将 uint8_t 转换为十六进制字符串(2 位数字)

我目前正在使用以下内容打印uint8_thex

for(int j = 0; j < len; j++) {
    printf("%02X ", bytes[j]);
}
Run Code Online (Sandbox Code Playgroud)

是否可以在没有for循环的情况下执行此操作并将结果简单地分配给变量?

c

0
推荐指数
1
解决办法
2万
查看次数

使用“new []”分配并仅使用“delete”删除会发生什么

好的,所以我在 C++ 中尝试使用指针,因为我在将近一年半的休息(学校的东西)后又开始编码了。所以如果这对你来说很幼稚,请原谅我,我只是生锈了。

无论如何,我在 VS 2019 中纠结于指针,我注意到一些事情开始困扰我。

这是我写的代码:

#include <iostream>

int main() {
    int* i = new int[4];
    *i = 323;
    *(i + 1) = 453;
    std::cout << *i << std::endl;
    std::cout << *(i + 1) << std::endl;
    delete i;
}
Run Code Online (Sandbox Code Playgroud)

有些东西看起来很奇怪吧?别担心,删除是故意的,并且是这个问题的重点。现在我预计它会发生一些内存事故,因为这不是我们在堆上删除数组的方式,令我惊讶的是,它没有(我在 Debug 和 Release 中都这样做了并且有相同的观察)

分配数组:

第一次修改: 在此处输入图片说明

第二次修改 在此处输入图片说明

现在我期待在删除时发生某种事故,因为我没有按照应该删除的方式删除它。但

删除不正确

在此处输入图片说明

现在在另一次运行中,我实际上正确地使用了删除运算符,它做了同样的事情:

在此处输入图片说明

现在,当我尝试使用 malloc 分配并使用 delete 释放它时,我得到了相同的结果。

所以我的问题是 - 为什么我的代码没有搞砸?我的意思是,如果这是它的工作方式,我可以使用 delete(指针)来擦除整个数组。

我的问题的要点是“新操作员在幕后做什么?”

c++ malloc pointers new-operator

0
推荐指数
1
解决办法
64
查看次数

C++ 不可能的 nullptr 调用之谜

所以我决定在我的项目中摆脱单例并引入依赖注入。我做了所有必要的更改,但遇到了一个小问题:无论我做什么,我的 NetworkService 都会被调用,无论它是否已初始化为 nullptr。我开始调查,我得到了一个不可能的场景。我感到无能为力,我放弃了。我不知道这段代码如何毫无问题地执行:

    auto impossible_response = ((NetworkService*)nullptr)->post(
            format_url("/api/data/fetch/"),
            payload.dump(),
            headers);
    log.crit("How did this succeeded? Please help me, StackOverflow");
Run Code Online (Sandbox Code Playgroud)

记录消息

我正在通过 Gradle 使用 G++ (C++20) 在 ArcoLinux 上编译我的代码。我已经尝试从头开始重建它,而不使用以前版本的任何缓存。

c++ nullptr

0
推荐指数
1
解决办法
166
查看次数

错误消息“分段错误(核心已转储)”

我正在尝试运行以下 C 程序:

/*
 * Illustrates system call fork
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int
main (
  int argc,
  char *argv[]
  )
{
  int tC, tF;
  pid_t pid;

  tC = atoi (argv[1]);
  tF = atoi (argv[2]);

  fprintf (stdout, "Main  :                  ");
  fprintf (stdout, "PID=%d; My parent PID=%d\n",
    getpid(), getppid());

  pid = fork();
  if (pid == 0){
    // Child
    sleep (tC);

    fprintf(stdout, "Child : PIDreturned=%d    ", pid);
    fprintf (stdout, "PID=%d; My parent PID=%d\n",
      getpid(), getppid());
  } else {
    // …
Run Code Online (Sandbox Code Playgroud)

c posix

0
推荐指数
1
解决办法
318
查看次数

指向 const 的指针:为什么 ptr[1] 也是只读的?

我理解,指向const的指针是一个指针,通过该指针无法更改该指针所指向的变量的值。因此,在下面的示例中,我希望编译器会引发错误:

\n
int main()\n{\n    int a = 42;\n    const int *ptr = &a;\n    ptr[0]++;\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

现在,为什么下面的示例也会出现错误?

\n
int main()\n{\n    int a = 42;\n    const int *ptr = &a;\n    ptr[1]++;\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

第二个示例(使用ptr[1]++)抛出error: increment of read-only location \xe2\x80\x98*(ptr + 4)\xe2\x80\x99。因此,看起来不仅指针指向的变量的值不能改变,其他相关内存位置的值也不能改变。

\n

与此相关的具体行为是什么?此行为在哪里引用?例如,https://en.cppreference.com/w/c/language/pointer对我来说似乎并不清楚。

\n

c pointers

0
推荐指数
2
解决办法
153
查看次数

C++ 中 &lt;int, bool&gt; 的映射默认为 false

我想将自定义值插入到我的地图中,这发生在代码的第一部分中,但没有发生在第二个片段中。我的代码如下:

// First part of the code

unordered_map<int, int> hashmap;

for(int i=0; i<arr.size(); i++)
{
    if(hashmap.find(arr[i]) != hashmap.end())
        hashmap[arr[i]] += 1;
    hashmap.insert(make_pair(arr[i], 1));
}

// Second part of the code

unordered_map<int, bool> hash2;
    
for(auto it=hashmap.begin(); it != hashmap.end(); ++it)
{
    if(hash2[it->second] == true)
        return false;
    hash2.insert(make_pair(it->second, true));
}
return true;
Run Code Online (Sandbox Code Playgroud)

当我尝试创建自定义映射(键值对)并将“值”设置为 1 时,它正在工作,但是当我尝试在代码的第二部分中创建自定义映射时,它默认为false.

谁能帮我调试这个问题?

c++ std data-structures c++14

0
推荐指数
1
解决办法
104
查看次数

如何切换数字中的所有位?

#include <stdio.h>

int main() {
    int n = 10;
    int ans = n ^ (1 << 2);
    printf("%d", ans);
}
Run Code Online (Sandbox Code Playgroud)

此代码切换特定数字,但我需要整个位来切换示例:10-> 0b1010-> 0b0101->5

c binary bit-manipulation

-1
推荐指数
1
解决办法
704
查看次数

我定义的反向功能未打印结果

在int main()函数中,如果使用声明向量b,则不会打印结果。如果我删除矢量b,则将打印预期的结果。为什么向量b的存在阻碍了反向函数的打印?

我擦除向量b,然后打印预期结果。向量b的存在阻碍了反向函数的打印

#include <iostream>
#include <vector>

using namespace std;

int reverse(vector<int> a, int s, int e) {
    while(s < e) {
        int temp = a[s];
        a[s] = a[e - 1];
        a[e - 1] = temp;
        s++;
        e--;
    }
    for(int i = 0; i < a.size(); i++) {
        cout << a[i] << " ";
    }
}

int main() {
    vector<int> a;

    a.push_back(1);
    a.push_back(3);
    a.push_back(5);
    a.push_back(7);
    a.push_back(9);

    vector<vector<int>> b;
    b[0].push_back(0);
    b[0].push_back(2);
    b[1].push_back(0);
    b[1].push_back(3);

    reverse(a, 0, 5);
}
Run Code Online (Sandbox Code Playgroud)

预期结果:9 7 5 …

c++

-2
推荐指数
1
解决办法
72
查看次数

为什么cout赋予不同的价值

#include <iostream>
using namespace std;
int main()
{
    int sum,a,b;
    a=4;
    b=4;
    sum=a+b;
    cout<<sum;
    cout<<sum;

}
Run Code Online (Sandbox Code Playgroud)

Q1为什么cout没有执行两次?
Q2为什么第二个cout给出不同的值?

c++

-5
推荐指数
1
解决办法
66
查看次数