【发布时间】:2019-03-30 10:12:06
【问题描述】:
我已经构建了一个工具,使学生能够在线(在受保护的环境中)编译和测试他们自己的 C++ 代码。
我想在编译时检查程序中的总数据量是否不超过一定大小,如果超过则产生编译错误。
(直接目标:限制 c++ std::array 大小)
我没有在网上找到信息。
我的编译链是:
g++ -Wall -Wextra -Waddress -std=c++11 -lm -fstack-protector -lm -o exename srcname
感谢您的帮助。
编辑 1
我给他们一个骨架,他们必须完成(此处)指定的位置:
“用‘produitTableau’的定义完成程序(这里),它得到一个整数和一个整数的二维数组,并将‘calcul’函数应用于它的每个值并返回修改后的数组。” (法语...)
#include <iostream>
#include <array>
using namespace std;
const int NB = 3;
int calcul (int a, int b);
array<array<int, NB>,NB> produitTableau(array<array<int, NB>,NB> t, int a);
int main()
{
/* déclaration et initialisation */
array<array<int, NB>,NB> tab ;
int x;
cin >> x;
for (int i=0;i<NB;i++) {for(int j=0; j<NB; j++) {cin >> tab[i][j];}}
/* traitement et résultat */
tab = produitTableau(tab, x);
/* résultat */
for (int i=0; i < NB; i++) {
for (int j=0; j < NB; j++) {
cout << tab[i][j] << " ";
}
}
return 0;
}
int calcul(int a, int b)
{
return a*b;
}
**(here)**
我希望他们写出类似的东西(我使用存储在文本文件中并用作输入数据的测试数据集检查结果):
array<array<int, NB>,NB> produitTableau(array<array<int, NB>,NB> t, int a)
{
for (int i=0; i < NB; i++) {
for (int j=0; j < NB; j++) {
t[i][j] = calcul(t[i][j] , a);
}
}
return t;
}
* 数组是按值传递的 *
所以我会检查使用的数据总量是否超过某个值,例如:10.000 字节。
可能是exe文件...我不知道。
【问题讨论】:
-
但是您到底想限制什么样的数据?取决于提到的
std::array的使用方式,它会落在.bss、堆栈或堆中 - 取决于您的学生决定如何使用它。您必须限制所有这些(以及可能的 .data)。 -
你必须比这更具体一点,看起来你在一些细节上有点糊涂;你到底想用你的限制来实现什么?这可能是 X/Y 情况(即您可能在这里尝试解决错误的问题)
-
你能限制受保护环境的内存吗?
-
“受保护的环境”不是正确的术语:它受到保护,因为学生需要一个 ID 和密码......
-
我找到了一个编译选项,如果对象的 siez 大于 x 时会发出警告:“...警告:'t2' 的大小为 4000000 字节 [-Wlarger-than=] |”。这可能是解决方案。但是把警告变成错误?但这不是使用的数组总数...