我想知道在 C 中是否可以在头文件中分配内存以便于我使用。例如,在我的源代码中,我像这样分配 data
缓冲区:
float *data = malloc((10*10) * sizeof(float));
我的代码将与其他人的代码进行比较,所以我只想在他的代码中插入我的函数 cluster(data, p, dim, ...)
并添加我的标题 (它也已经包括所有缓冲区分配)。这有效吗?
谢谢,
最佳答案
你可以在任何你喜欢的地方#include一个标题,所以即使不是很好的风格也是完全合法的
int myFunction()
{
#include "myfile.h"
}
但是,它对我来说看起来很可怕,并且应该被遗忘。
你的问题是你的线
float *data = malloc((10*10) * sizeof(float));
在函数体之外是非法的。你有两种解决方法。您可以将其包装在一个函数中:
float* getFloatArray(int count)
{
return malloc(count * sizeof(float));
}
如果你只想要一个实例,即使你多次调用它:
float* getFloatArray(int count)
{
static float* singleton = NULL;
if (singleton == NULL)
{
singleton = malloc(count * sizeof(float));
}
return singleton;
}
但是,如果您将其放在 header 中,就会面临链接时间重复符号的危险。如果将其设为静态,您将获得在包含 header 的每个编译单元中定义的相同功能。
然而,正如 olaf 所观察到的,您对 malloc 的参数是不变的,因此您可以只定义一个静态数组:
static float data[10 * 10];
但是,您仍然会为每个编译单元获得一个新实例。
我会将它(数组或函数)添加到一个新的 .c 文件中,并在您的 header 中放置一个 extern def,然后将您的 c 文件添加到链接阶段。
关于c - 头文件中缓冲区分配的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44138597/