在 C++ 文件主体中为引用变量分配内存和设置值的问题(不在函数中)

Posted

技术标签:

【中文标题】在 C++ 文件主体中为引用变量分配内存和设置值的问题(不在函数中)【英文标题】:Problem in allocating memory and set value to a refrence variable in c++ file body (Not in function) 【发布时间】:2021-07-31 02:01:12 【问题描述】:

我是 C 和 C++ 的新手。我想分配内存并为我的 c++ 文件主体中的指针设置一个值,这样它只会执行一次。 这是我的代码: 我的文件.h:

struct SelectedRows_t 
  uint32_t rowsLen;
  SelectData_t* rows[];
;
extern SelectedRows_t* selectedRows;

我的文件.cpp

SelectedRows_t* selectedRows = (SelectedRows_t*)malloc(sizeof(selectedRows->rowsLen));

// some functions which use selectedRows variable

但我找不到初始化变量的方法。我需要在程序开始时将 rowsLen 设置为 0。

我没有 initmain 函数,因为我正在尝试编写一个可以与其他 c++ 代码一起在任何地方使用的库。 我只需要在程序开始时将这个 0 分配给这个变量一次。 我必须自己为这个变量分配内存,否则像 selectedRows->rowsLen 这样的代码会使我的程序崩溃。 我不能在我的函数中使用realloc 这个变量,因为这个结构中的rows 变量需要在任何内存重新分配之前是空闲的。 我不知道这是否重要,但我正在编写这个程序以在 esp32 板上运行。

提前致谢。

【问题讨论】:

您不能以这种方式在 c 或 c++ 中的任何函数之外进行函数调用。 C++ 构造函数可以在main() 之前执行。您可能有兴趣了解单例模式 看The Definitive C++ Book Guide and List的一些书,都应该介绍构造函数的基本概念。 malloc 现在可以使用了。我为我的变量分配了内存,但它的值不是 0。所以问题不在于函数调用。是设置值。 @KamilCuk 我不在课堂上。我不知道如何在类之外使用构造函数。这样做是否有效?我只有一个没有类的cpp文件。 I don't know how to 然后购买一本书并学习。 I just have a cpp file no class 然后在“cpp 文件”中实现“类”并调用它的构造函数并初始化其中的数据。 【参考方案1】:

我通过使用一个函数在其中完成我的所有工作并返回指向最终SelectedRows_t的指针来解决了这个问题:

SelectedRows_t* createSelectedRows() 
  SelectedRows_t* selectedRowsTemp = (SelectedRows_t*)malloc(sizeof(selectedRows->rowsLen));
  selectedRowsTemp->rowsLen=0;
  return selectedRowsTemp;


SelectedRows_t* selectedRows = createSelectedRows();

【讨论】:

以上是关于在 C++ 文件主体中为引用变量分配内存和设置值的问题(不在函数中)的主要内容,如果未能解决你的问题,请参考以下文章

c++中函数中变量内存分配以及返回指针引用类型的思考

JavaScript 变量作用域及内存详解

在 C# 中为富文本框分配内存

Java的内存分配

java中基本数据类型和引用数据类型在内存分配上有啥不同

如何在 C++ 中为二维对象数组分配内存? [复制]