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是<代码>这个>长度>代码>应该怎么做?