尝试摆脱任何堆内存分配

Trying to get rid of any heap memory allocation

本文关键字:内存 分配 任何堆      更新时间:2023-10-16

我知道如何使用堆内存来做到这一点,但我试图摆脱代码中的任何堆内存分配。

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

如何使用堆栈内存分配来做到这一点?

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"
}

for 循环将如下所示:

unsigned char i;
for (i = 0; i < (dog.nameLength-1); i++) {
randomName[i] = packet[i];
}
randomName[i] = 0;

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

但是对于主要问题:一般来说,做你正在尝试做的事情(在堆栈上动态分配(是一个非常糟糕的主意,这正是堆分配的用途。

此外,标准C++不允许这样做。但是,您可以使用编译器扩展:为什么堆栈中没有可变大小的数组?Linux有Alloca:http://man7.org/linux/man-pages/man3/alloca.3.html C++如何在堆栈上动态分配内存?

但是,同样,不要这样做,除非你真的需要并且明白你在做什么

另外,请听听评论者关于如何提问并提供最少的例子。