Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 试图摆脱任何堆内存分配_C++_Stack_Heap Memory - Fatal编程技术网

C++ 试图摆脱任何堆内存分配

C++ 试图摆脱任何堆内存分配,c++,stack,heap-memory,C++,Stack,Heap Memory,我知道如何使用堆内存,但我试图在代码中消除任何堆内存分配 我不能使用任何可以帮助我的库,这意味着:例如 如何使用堆栈内存分配来实现这一点 int main(void) { class Animal { unsigned char nameLength; unsigned char name[]; setName(unsigned char name[]) { memcpy(this->name, name,

我知道如何使用堆内存,但我试图在代码中消除任何堆内存分配

我不能使用任何可以帮助我的库,这意味着:
例如

如何使用堆栈内存分配来实现这一点

int main(void) {
    class Animal {
        unsigned char nameLength;
        unsigned char name[];

        setName(unsigned char name[]) {
            memcpy(this->name, name, this->length * sizeof(unsigned char));
        }
    }

    Animal dog;

    // The value '4' isn't constant, it depends on received data from socket
    dog.nameLength = 4;

    // Right now I know how many elements will be in dog.name array

    unsigned char randomName[dog.nameLength];

    // Here will be a for loop, but just for example:
    randomName[0] = "B";
    randomName[1] = "e";
    randomName[2] = "n";
    randomName[3] = "/0";

    dog.setName(randomName);

    // Expected output: dog.name = "Ben\0"
}
for循环将如下所示:

unsigned char i;
for (i = 0; i < (dog.nameLength-1); i++) {
    randomName[i] = packet[i];
}
randomName[i] = 0;
无符号字符i;
对于(i=0;i<(dog.nameLength-1);i++){
随机名称[i]=数据包[i];
}
随机名称[i]=0;

您的代码有多个问题,请针对每个问题将其分解为多个问题

但对于主要问题:一般来说,执行您试图执行的操作(在堆栈上动态分配)是一个非常糟糕的主意,这正是堆分配的目的

也,标准C++不允许这样做。但是,您可以使用编译器扩展:并且linux具有alloca:&

但是,再次强调,除非你真的需要并且你明白你在做什么,否则不要这样做


另外,请听评论如何提问,并提供一个简单的例子。

你所展示的有多个问题,都与你所问的问题无关。解决你所问问题的唯一方法是定义一个固定长度的
Animal::name
,大到足以容纳所有可能需要的字符串。最后,为什么不能使用任何堆分配?这是任务要求吗?你的任务是什么?它的要求是什么?请花些时间阅读,以及。
unsignedcharrandomname[dog.nameLength]这是无效的C++,因为VLAWE是<代码>这个>长度>代码>应该怎么做?