尝试摆脱任何堆内存分配
Trying to get rid of any heap memory allocation
我知道如何使用堆内存来做到这一点,但我试图摆脱代码中的任何堆内存分配。
我不能使用任何可以帮助我的库,这意味着:例如<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++如何在堆栈上动态分配内存?
但是,同样,不要这样做,除非你真的需要并且你明白你在做什么。
另外,请听听评论者关于如何提问并提供最少的例子。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配