标签: dynamic-allocation

处理Frama-C中的动态分配

我正在尝试使用Frama-C来验证包含动态内存分配的C代码的安全属性.当前版本的ACSL规范语言(1.8)似乎能够表达很多关于动态分配的内存.但是,大部分内容尚未在Frama-C Neon中实现.

假设我们采用以下代码片段:

#include <stdlib.h>

/*@ requires \valid(p) && \valid(q) && \separated(p, q);
  @ ensures \valid(q);
  @*/
void test(char *p, char *q) {
  free(p);
}

int main(void) {
  char *p = (char *) malloc(10);
  char *q = (char *) malloc(10);

  test(p, q);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

因此,main分配两块内存,并将指针传递给它们进行功能测试.测试释放p指向的块,但不释放q指向的块.假设我想证明在测试结束时,指针q仍然有效.我该怎么办?

似乎我必须自己建模堆:axiomatize一些谓词谈论堆,并使用它们来指定malloc和free,模仿ACSL的未实现部分.最简单的方法是什么,以便我可以验证上面的例子?

malloc dynamic-allocation frama-c

5
推荐指数
0
解决办法
371
查看次数

悬空指针和内存泄漏有什么区别?

我是C++的新手,想问下面的代码是否是悬空指针或内存泄漏的一个例子,因为它指向动态分配的数组:

int * n = new int[10];
for (int prev = 0; prev < 10; prev++) {
    *n = *(n + prev + 1);
}
delete[] n;
n = nullptr;
Run Code Online (Sandbox Code Playgroud)

memory-leaks dynamic-allocation c++11 dangling-pointer

5
推荐指数
3
解决办法
1027
查看次数

安全关键项目中动态分配的替代方案(C)

安全关键项目不建议任何动态分配或释放分配的内存.仅在程序执行的精化/初始化阶段,才允许.

我知道你们中的大多数人都会争论实施SW,它应该只进行所有静态分配,或者在代码中做一些理由,动态分配不会损害整个程序等等,但是,这个问题还有其他选择吗?有什么方法或任何例子可以在程序初始化/详细说明期间分配一些(堆)内存并从那里分配/释放内存?如果我们真的想在(安全关键)项目中进行动态分配,还是解决这个问题的任何解决方案/替代方案?

safety-critical dynamic-allocation memory-safety

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

Spark - 动态分配 - shuffle_1_0_0.index(没有那个文件或目录)

在 Spark 2.2.0 上执行我的 scala 作业时,我不时遇到以下错误:

引起:java.io.FileNotFoundException:/spark/temporary/spark-927d72b5-154d-4fd5-a18e-4aefc0e05a59/executor-cdd8da76-bb86-4e4c-bf26-55acbcc761bf15cbc761bf/spark-927fd5-a18e-4aefc0e05a59 0f/shuffle_1_0_0.index(没有那个文件或目录)

我的 spark-submit 命令如下所示:

/spark/bin/spark-submit --verbose --conf spark.local.dir=/spark/temporary --conf spark.dynamicAllocation.enabled=true --conf spark.shuffle.service.enabled=true --conf spark.dynamicAllocation.executorIdleTimeout=2m --conf spark.shuffle.service.index.cache.entries=4096 --conf spark.memory.offHeap.enabled=true --conf spark.memory.offHeap.size=3g --conf spark.executor.extraJavaOptions="-XX:ParallelGCThreads=4 -XX:+UseParallelGC" --conf spark.file.transferTo=false --conf spark.shuffle.file.buffer=5MB --conf spark.shuffle.unsafe.file.output.buffer=5MB --conf spark.unsafe.sorter.spill.reader.buffer.size=1MB --conf spark.io.compression.lz4.blockSize=512KB --conf spark.shuffle.registration.timeout=2m --conf spark.shuffle.registration.maxAttempts=5 --conf spark.memory.useLegacyMode=true --conf spark.shuffle.memoryFraction=0.32 --conf spark.storage.memoryFraction=0.18 --conf spark.shuffle.io.maxRetries=10 --conf spark.dynamicAllocation.maxExecutors=3 --conf spark.dynamicAllocation.initialExecutors=3 --conf spark.task.cpus=2 --conf spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2 --master spark://spark-master.spark:7077 --deploy-mode client --class control.TimeLensDriver --executor-cores 2 --executor-memory 2g --driver-memory 2g /spark/spark-job.jar /spark/s3Credential.conf 2017-09-08 7 /spark/public-holydays.json /spark/school-holydays.json /spark/de_postal_codes.json prometheus-pushgateway.monitoring-mida:9091 …
Run Code Online (Sandbox Code Playgroud)

scala shuffle dynamic-allocation ceph apache-spark

5
推荐指数
0
解决办法
651
查看次数

std :: aligned_alloc()的重新分配等效项是什么?

我注意到std::aligned_alloc()进入C ++ 17,我喜欢它。但是-当我需要重新分配时会发生什么?我可以手动执行此操作(假设当前分配的地址处的可用空间仅是我要求的空间量),但是标准库中是否不应该提供此功能?

c++ memory-alignment dynamic-allocation c++17 memory-reallocation

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

C++中对象的动态内存分配

我试图在一个非常简单的C++程序中动态分配(它现在不是那么动态,但最终会是)对象的内存.我是班级新手,最近才开始玩C++,让C落后.这是代码:

#include <iostream>
using namespace std;

class Test {
  private:
    int i;
  public:
    Test(int);
    ~Test();
    void print();
};

Test::Test(int ii) { i = ii; }
Test::~Test() { i=0; cout << "deconstructor called...value of i= " << i << endl; }
void Test::print() { cout << "value of i= " << i << endl; }

int main()
{
  Test a(10),*b,*c;
  //a.print(); // this works

  b = new Test(12);
  //b->print(); // this works as well

  for (int i=0; i<2; i++) …
Run Code Online (Sandbox Code Playgroud)

c++ dynamic-allocation

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

什么是C++中的动态内存分配?

我学习用C动态内存分配++和关键字newnew[]被提及.据说,用户可以在运行时指定内存分配的大小,而不像在源代码中声明一个具有固定大小的变量或数组.

我不明白这个概念.它是如何工作的?我只需要澄清这个想法,一个例子会有所帮助!

c++ malloc memory-management new-operator dynamic-allocation

4
推荐指数
2
解决办法
3788
查看次数

Ada 中的字符串数组

我在 Ada95 中有一个程序,我必须在其中创建一个字符串数组。该数组可以包含可变长度的字符串。

示例:我已经声明了一个数组,其中所有索引都可以存储大小为 50 的字符串。当我为上述数组分配一个较小的字符串时,我得到“约束错误”。

代码:

procedure anyname is
    input_array : array(1..5) of String(1..50);
begin
    input_array(1):="12345";
end anyname;
Run Code Online (Sandbox Code Playgroud)

我试图创建 Unbounded_Strings 数组。但这也行不通。谁能告诉我如何在上面的字符串数组中存储这个“12345”?

arrays string ada dynamic-allocation

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

释放2D阵列中的内存

假设我们有:

int** myArray = new int*[100];
for(int i = 0; i < 100; i++){
    myArray[i] = new int[3];
}
Run Code Online (Sandbox Code Playgroud)

解除分配此数组的适当方法是什么(下面的方法,如果这是正确的方法)?

1.

delete[] myArray;
Run Code Online (Sandbox Code Playgroud)

2.

for(int i = 0; i < 100; i++){
    for(int j = 0; j < 3; j++){
        delete myArray[i][j];
    }
}
delete[] myArray;
Run Code Online (Sandbox Code Playgroud)

直观地看起来我们应该做类似2.因为我们想要删除所有分配的内存,但我不确定.

c++ arrays pointers dynamic-allocation

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

C++动态分配类数组

假设a class X具有构造函数X(int a, int b)

我创建了一个指向X的指针,X *ptr;为类动态分配内存.

现在创建一个X类对象数组

 ptr = new X[sizeOfArray];
Run Code Online (Sandbox Code Playgroud)

到现在一切都很好.但我想要做的是创建上面的对象数组应该调用构造函数X(int a, int b).我尝试如下:

ptr = new X(1,2)[sizeOfArray]; 
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,它给了我编译时错误

错误:预期';' 在'['标记|之前

如何创建一个对象数组来调用构造函数?

SizeOfArray 用户在运行时输入.

编辑: 我想要达到的目标是不可能的,如天顶所回答的那样,或者太复杂了.那我std::vector该如何使用呢?

c++ dynamic-allocation

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