试图摆脱任何堆内存分配

问题描述 投票:0回答:1

我知道如何使用堆内存,但是我尝试摆脱代码中的任何堆内存分配。

我无法使用任何可以帮助我的库,这意味着:[例如C0]。

我该如何使用堆栈内存分配?

<string>

for循环将看起来像:

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"
}
c++ stack heap-memory
1个回答
0
投票

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

但是对于主要问题:通常,做您想做的事情(在栈上动态分配)是一个非常糟糕的主意,这正是堆分配的目的。

此外,标准C ++不允许这样做。但是,您可以使用编译器扩展:unsigned char i; for (i = 0; i < (dog.nameLength-1); i++) { randomName[i] = packet[i]; } randomName[i] = 0; ,而Linux具有alloca:Why no variable size array in stack?http://man7.org/linux/man-pages/man3/alloca.3.html

但是同样,除非您确实需要并且了解您在做什么],否则不要这样做。

另外,请听评论者介绍如何提出问题,并提供一个最小的例子。

© www.soinside.com 2019 - 2024. All rights reserved.