我正在制作一个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#背景,我对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类,以便它不易发生内存泄漏.
知道如何解决这个问题吗?
在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"?
我正在考虑修改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) 如何加载两个名称相同但位于不同文件夹中的包?
例子:
/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 项目组织的信息并不多。
这里非常具体的问题......并且这不是作业(离开那么远......远远落后).基本上我需要为写入EPROM的代码计算校验和,并且我想在Ada程序中编写这个函数来练习我在语言中的位操作.
我正在更改EPROM的固件数据文件的一部分,并且该更改需要在结尾处使用新的有效校验和,因此生成的系统将接受更改的代码.这个校验和的开始是对它所覆盖的所有数据进行模256的二进制求和,然后进行其他更高级别的操作以获得我不会在这里进行的校验和.
那么现在我如何在mod类型上进行二进制加法?
我假设如果我在mod类型上使用"+"运算符,它将被总结为整数值运算...我不想要的结果.我真的很难过这个.如果我不需要,我不想真正做一个打包数组并执行比特携带,特别是如果那被认为是"老帽子".我正在阅读的参考文献声称,在处理二进制操作时,您需要使用mod类型来确保更可移植的代码.如果可能,我想尝试一下.我正在尝试使用此程序来定位多个平台,因此可移植性是我正在寻找的.
任何人都可以建议我如何在mod类型上执行二进制加法?
语言中的任何起始位置都会有很大帮助.
在GNAT Programming Studio中,您如何运行该程序?我看到它编译成功,但我看不到我的程序开始运行的位置.我想测试一下.
我用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",但这也没有用?
接下来是什么?帮帮忙..
我是 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”
我希望你能帮助我找出我的类型出了什么问题!
我有一个函数返回特定项的字符串,我需要多次调用该函数并将这些字符串合并为一个.组合的字符串是有界的.当空格字符初始化时,我确保填充它,但我不断收到"长度检查失败"错误.有什么基本的我在这里做错了吗?
FOR I IN 1..Collection.Size LOOP
Combined_String := combined_string & Tostring(Collection.Book(I));
END LOOP;
Run Code Online (Sandbox Code Playgroud)