小编pla*_*cel的帖子

SIGSEGV在C++循环中有一个非常大的数组

以下使用筛子打印一些质数的代码会在在线判断中生成SIGSEGV错误.

int main()
{
long count=1;
int arr[100000000];
printf("2\n");
for(long i=3;i<100000000;i=i+2)
{
    arr[i]=1;
}
for(long i=3;i<100000000;i=i+2)
{
    if(arr[i]==1)
    {
        count++;
        if(count%100==1)printf("%ld\n",i);
        for(long j=2;i*j<100000000;j++)
            arr[i*j]=0;
    }
}
//scanf("%ld",&count);
}
Run Code Online (Sandbox Code Playgroud)

但如果我删除一些陈述:

for(long i=3;i<100000000;i=i+2)
{
    if(arr[i]==1)
    {
        count++;
    }
}
Run Code Online (Sandbox Code Playgroud)

如上修改第二个循环.它没有显示错误.可以帮助解决为什么会发生这种情况以及如何在第一个程序中纠正这个问题.

c++ memory stack-overflow loops segmentation-fault

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

模板参数包扩展语法的基本原理

给出以下辅助函数

template <typename ... Ts>
auto f(Ts&& ... args) {}

template <typename T>
auto g(T x) { return x; }
Run Code Online (Sandbox Code Playgroud)

1)我们像往常一样扩展模板参数包.

template <typename ... Ts>
void test1(Ts&& ... args)
{
    f(args...);
}
Run Code Online (Sandbox Code Playgroud)

2)这里扩展...发生在函数调用之后g().这也是合理的,因为g()每个人都会调用它args:

template <typename ... Ts>
void test2(Ts&& ... args)
{
    f(g(args)...);
}
Run Code Online (Sandbox Code Playgroud)

3)我期望的逻辑相同test3(Is, args...)...,但没有.你必须写test3(Is..., args...):

template <typename ... Ts>
void test3(size_t i, Ts&& ... args)
{
    f(args...);
}

template <typename ... Ts>
void …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-functions variadic-templates

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

C++中未初始化的内存

operator new在 C++ 中,分配和初始化内存(通过调用默认构造函数)。如果我想要内存未初始化怎么办?在这种情况下如何分配内存?

malloc例如,在 CI 中可以使用它只会分配内存,而不是初始化它。

c++ memory memory-management memory-alignment

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

0.0 / 0.0 是一个明确定义的值吗?

由于0.0 / 0.0在数学上未定义,IEEE-754 浮点标准合理地定义了NaN其结果。现在,因为与 不同infinityNaN不是一个明确定义的值,而是一组值,因此是否0.0 / 0.0是一个明确定义的常量的问题也是合理的。

值得一提的是x / 0.0infinity如果x != 0.0.

IEEE-754 浮点标准中是否有0.0 / 0.0明确定义的常量值?NaN换句话说,它是否具有明确定义的位模式?

language-agnostic floating-point nan numerical-computing ieee-754

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

C++ 以逆序访问数组

我有下面的代码

int array[3] = { 10, 15, 20};
Run Code Online (Sandbox Code Playgroud)

如何以相反的顺序访问其元素,而不反转索引。我的意思是索引0将返回最后一个元素(20),索引2将返回第一个元素(10)。

array[0] // it would return 20
Run Code Online (Sandbox Code Playgroud)

提前致谢

c++ arrays

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