小编Jor*_*rdi的帖子

在64位系统中分配超过4GB的内存

我正在运行此代码,在64位vc ++ 2005上编译,在Windows Server 2008 R2上使用32GB.for循环中存在访问冲突.

#include <iostream>
using namespace std;


int main(int argc, char* argv[])
{   
    double *x = new double[536870912];

    cout << "memory allocated" << endl;

    for(long int i = 0; i < 536870912; i++)
    {   
        cout << i << endl;
        x[i] = 0;
    }

    delete [] x;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

因此,如果新双[536870912]中没有异常,为什么在对特定阵列位置进行赋值时会出现访问冲突?

值得一提的另一点是,该程序在另一台计算机上成功测试.

c++ memory access-violation windows-server-2008-r2

7
推荐指数
1
解决办法
2474
查看次数

如何使Applicative实例成为某种数据类型

我正在阅读有关Haskell的Graham Hutton的书,并且不要一口气地进行练习。练习内容如下:

给定以下类型表达式

data Expr a = Var a | Val Int | Add (Expr a) (Expr a) deriving Show
Run Code Online (Sandbox Code Playgroud)

包含某些类型a的变量,展示了如何使这种类型成为Functor,Applicative和Monad类的实例。借助示例,说明>>=该类型的运算符的作用。


我在定义<*>Applicative运算符时遇到了问题。的类型<*>是:

(<*>) :: Expr (a -> b) -> Expr a -> Expr b
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么用(Val n) <*> mx,因为从理论上讲我需要提供一个Expr b,但是我所拥有的只是一个,Expr a并且没有转换(a -> b)的函数。

我也不知道该怎么办(Add l r) <*> mx


这是我的实现。

instance Functor Expr where
    --fmap :: (a -> b) -> Expr a -> Expr b
    fmap …
Run Code Online (Sandbox Code Playgroud)

monads haskell applicative

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