小编T.E*_*.D.的帖子

在c ++中使用动态多维数组

我正在制作一个C++程序,检查给定的aray是否为拉丁方.我需要使用一个存储给定拉丁方的动态多维数组.但我不能将数组传递给执行检查的函数...

目前我有这样的代码来调用函数:

int squaretest(int **p, int n, int sum) {

    //some code
};
Run Code Online (Sandbox Code Playgroud)

这段代码用于创建数组:

int main() { 

    //some code. n - length of one row, sum - sum of elements in one row.
    int a;  
    int **lsquare;
    lsquare = new int*[n];
    for (int i=0;i<=n-1;i++) for (int j=0;j<=n-1;j++) {
        cin >>a;
        lsquare[i][j] = a;
    }
    blocktest(lsquare,n,sum);
    //some code
};
Run Code Online (Sandbox Code Playgroud)

代码编译(我正在使用Geany IDE和G ++编译器)但是当我在终端中运行它时,在第一次输入后,必须存储在块[0] [0]中,我得到了分段错误.我的代码有什么问题,什么是正确的溶剂?

c++ multidimensional-array

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

标准列表,矢量,地图等占用的可用内存

来自C#背景,我对C++上的内存管理只有最模糊的想法 - 我所知道的是我必须手动释放内存.正如我的C++代码被写入的类型中的物体这样的方式的结果std::vector,std::list,std::map自由地实例化,使用,但不会释放.

直到我几乎完成了我的程序,我才意识到这一点,现在我的代码由以下几种模式组成:

struct Point_2
{
    double x;
    double y;
};

struct Point_3
{
    double x;
    double y;
    double z;
};

list<list<Point_2>> Computation::ComputationJob
    (list<Point_3>pts3D, vector<Point_2>vectors)
{
    map<Point_2, double> pt2DMap=ConstructPointMap(pts3D);
    vector<Point_2> vectorList = ConstructVectors(vectors);
    list<list<Point_2>> faceList2D=ConstructPoints(vectorList , pt2DMap);
    return faceList2D;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我必须释放每个单独的列表用法(在上面的例子中,这意味着我必须释放pt2DMap,vectorList并且faceList2D)?那将是非常乏味的!我也可以改写我的Computation类,以便它不易发生内存泄漏.

知道如何解决这个问题吗?

c++ memory-management stl

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

Ada95:将整数转换为字符

在Ada中有一种方法可以将整数转换为字符吗?

例如:

TempInt := 1;
InGrid(RowIndex, ColumnIndex) := (ToCharacter(TempInt)); --This will be used to input a character value from an integer into an array of characters.
Run Code Online (Sandbox Code Playgroud)

Ada的整数 - >字符转换是否有"ToCharacter"?

ada

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

将外部错误代码映射到std :: error_condition

我正在考虑修改MS结构化异常到异常映射代码,我们必须使用新的C++ 11 error_code/error_condition/exception mechanisim.

我的理解是,一般的哲学是你应该首先尝试将你的错误代码映射到std :: error_condition代码,否则,制作你自己的自定义error_condition代码.

我看到的问题是std :: errc非常适合与POSIX错误配合使用.如果我从一个源代码中获取代码,该代码具有与典型OS调用相比差异很大的错误,那么它就不能很好地映射.

例如,我们可以使用Microsoft的SEH代码.这些来自操作系统,所以理论上它应该映射以及POSIX之外的任何东西.但它肯定似乎没有很好地映射:

EXCEPTION_ACCESS_VIOLATION  = permission_denied
EXCEPTION_ARRAY_BOUNDS_EXCEEDED = argument_out_of_domain perhaps?
EXCEPTION_BREAKPOINT = ?
EXCEPTION_DATATYPE_MISALIGNMENT = ?
EXCEPTION_FLT_DENORMAL_OPERAND = ? 
EXCEPTION_FLT_DIVIDE_BY_ZERO = ?
EXCEPTION_FLT_INEXACT_RESULT = ? 
EXCEPTION_FLT_INVALID_OPERATION = ?
EXCEPTION_FLT_OVERFLOW = ?
EXCEPTION_FLT_STACK_CHECK = ?
EXCEPTION_FLT_UNDERFLOW = ?
EXCEPTION_GUARD_PAGE = ?
EXCEPTION_ILLEGAL_INSTRUCTION = ?
EXCEPTION_IN_PAGE_ERROR = ?
EXCEPTION_INT_DIVIDE_BY_ZERO = ?
EXCEPTION_INT_OVERFLOW = value_too_large perhaps, but then what do I use for _STACK_OVERFLOW?
EXCEPTION_INVALID_DISPOSITION = ?
EXCEPTION_INVALID_HANDLE = ? …
Run Code Online (Sandbox Code Playgroud)

c++ structured-exception c++11

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

如何在目录中组织 Ada 项目?

如何加载两个名称相同但位于不同文件夹中的包?

例子:

/src/alpha/foopackage.ads
/src/beta/foopackage.ads
Run Code Online (Sandbox Code Playgroud)

然后我想使用 foopackages 使用:

with alpha.foopackage; 
with beta.foopackage; 
Run Code Online (Sandbox Code Playgroud)

另外,如果您有关于在 Ada 中组织项目的任何其他提示,请写信。网上关于 Ada 项目组织的信息并不多。

ada

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

如何在Ada中对mod类型执行二进制加法?

这里非常具体的问题......并且这不是作业(离开那么远......远远落后).基本上我需要为写入EPROM的代码计算校验和,并且我想在Ada程序中编写这个函数来练习我在语言中的位操作.

我正在更改EPROM的固件数据文件的一部分,并且该更改需要在结尾处使用新的有效校验和,因此生成的系统将接受更改的代码.这个校验和的开始是对它所覆盖的所有数据进行模256的二进制求和,然后进行其他更高级别的操作以获得我不会在这里进行的校验和.

那么现在我如何在mod类型上进行二进制加法?

我假设如果我在mod类型上使用"+"运算符,它将被总结为整数值运算...我不想要的结果.我真的很难过这个.如果我不需要,我不想真正做一个打包数组并执行比特携带,特别是如果那被认为是"老帽子".我正在阅读的参考文献声称,在处理二进制操作时,您需要使用mod类型来确保更可移植的代码.如果可能,我想尝试一下.我正在尝试使用此程序来定位多个平台,因此可移植性是我正在寻找的.

任何人都可以建议我如何在mod类型上执行二进制加法?

语言中的任何起始位置都会有很大帮助.

cross-platform bit-manipulation ada

4
推荐指数
1
解决办法
574
查看次数

如何在GPS中运行Ada代码

在GNAT Programming Studio中,您如何运行该程序?我看到它编译成功,但我看不到我的程序开始运行的位置.我想测试一下.

ide ada gnat

4
推荐指数
1
解决办法
5145
查看次数

在linux终端中运行Ada程序

我用Linux薄荷.安装gnat与Ada程序一起使用"sudo apt-get install gnat".
创建了一个简单的hello world程序:

with Ada.Text_IO;
procedure Hello is
begin
    Ada.Text_IO.Put_Line("Hello, world!");
end Hello;
Run Code Online (Sandbox Code Playgroud)

并将其保存为"hello.adb"

尝试从保存的位置运行它,打开终端并键入并获得以下内容:

$ cd/media/disk1/ada\programs
$ gnatmake hello.adb
gcc-4.4 -c hello.adb
gnatbind -x hello.ali
gnatlink hello.ali
$ hello
程序'hello'可以在以下包中找到:
*hello
*hello-debhelper
尝试:sudo apt-get install
$ ./hello
bash:./ hello:权限被拒绝

我该怎么做才能看到程序的输出?
哪里出错了?

很少有网站说,只是在"gnatmake hello.adb"之后键入"hello"但是它没有用,
很少有人说,在"gnatmake hello.adb"之后尝试"./hello",但这也没有用?

接下来是什么?帮帮忙..

linux ada gnat

4
推荐指数
1
解决办法
5094
查看次数

Ada sin(x) 使用泰勒级数计算

我是 Ada 的绝对初学者,我正在尝试使用泰勒级数计算 sin(x) [sin(3) now],但我无法让它发挥作用。

所以这是我的程序:

with Ada.Float_Text_IO;
with Mat;
procedure SinKoz is
    X:Float:=3.0;
    Szamlalo:Float:=0.0;
begin
    for I in 1..100 loop
        Szamlalo := Szamlalo + ((-1.0)**I)*(X**(2.0*I+1.0))/Mat.Faktorialis(2*I+1);
    end loop;
    Ada.Float_Text_IO.Put( Szamlalo );
end SinKoz;
Run Code Online (Sandbox Code Playgroud)

在 Mat 内部,这是我的 Faktorialis,它计算 2*I+1 的阶乘:

function Faktorialis( N: Float ) return Float is
      Fakt : Float := 1.0;
begin
      for I in 1..N loop
         Fakt := Fakt * I;
      end loop;
      return Fakt;
end Faktorialis;
Run Code Online (Sandbox Code Playgroud)

当我试图编译我的代码时,出现这个错误: 指数必须是自然类型,找到类型“Standard.Float”

我希望你能帮助我找出我的类型出了什么问题!

trigonometry ada

4
推荐指数
1
解决办法
575
查看次数

Ada String Concatenation

我有一个函数返回特定项的字符串,我需要多次调用该函数并将这些字符串合并为一个.组合的字符串是有界的.当空格字符初始化时,我确保填充它,但我不断收到"长度检查失败"错误.有什么基本的我在这里做错了吗?

FOR I IN 1..Collection.Size LOOP  
    Combined_String :=  combined_string & Tostring(Collection.Book(I));  
END LOOP;
Run Code Online (Sandbox Code Playgroud)

ada

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