我是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
根据这一点,我的程序是指它无权访问的内存位置。但是我看不到任何限制此代码访问某些内容的东西。
他们中没有一个回答我的查询,因为我无法将其中提到的代码与我的代码相关联。编号为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) 我目前正在使用以下内容打印uint8_t到hex:
for(int j = 0; j < len; j++) {
printf("%02X ", bytes[j]);
}
Run Code Online (Sandbox Code Playgroud)
是否可以在没有for循环的情况下执行此操作并将结果简单地分配给变量?
好的,所以我在 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(指针)来擦除整个数组。
我的问题的要点是“新操作员在幕后做什么?”
所以我决定在我的项目中摆脱单例并引入依赖注入。我做了所有必要的更改,但遇到了一个小问题:无论我做什么,我的 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 程序:
/*
* 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) 我理解,指向const的指针是一个指针,通过该指针无法更改该指针所指向的变量的值。因此,在下面的示例中,我希望编译器会引发错误:
\nint main()\n{\n int a = 42;\n const int *ptr = &a;\n ptr[0]++;\n\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n现在,为什么下面的示例也会出现错误?
\nint main()\n{\n int a = 42;\n const int *ptr = &a;\n ptr[1]++;\n\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n第二个示例(使用ptr[1]++)抛出error: increment of read-only location \xe2\x80\x98*(ptr + 4)\xe2\x80\x99。因此,看起来不仅指针指向的变量的值不能改变,其他相关内存位置的值也不能改变。
与此相关的具体行为是什么?此行为在哪里引用?例如,https://en.cppreference.com/w/c/language/pointer对我来说似乎并不清楚。
\n我想将自定义值插入到我的地图中,这发生在代码的第一部分中,但没有发生在第二个片段中。我的代码如下:
// 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.
谁能帮我调试这个问题?
#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
在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 …
#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给出不同的值?