我有功能
populateAvailableExtensions(const char** gAvailableExtensions[])
采用指向字符串数组的指针。
我使用malloc(0)
将初始内存分配给该阵列。规范说它将返回空指针或可以传递给free()
的唯一指针。
int currentAvailableExtensionCount = 0;
此变量将在gAvailableExtensions
中存储字符串数。
在此for
循环内
for (int i = 0; i < availableExtensionCount; ++i)
我有这段代码
size_t sizeOfAvailableExtensionName =
sizeof(availableExtensionProperties[i].name);
reallocStatus = realloc(*gAvailableExtensions, sizeOfAvailableExtensionName);
memcpy(&(*gAvailableExtensions)[currentAvailableExtensionCount],
&availableExtensionProperties[i].name,
sizeOfAvailableExtensionName);
++currentAvailableExtensionCount;
其中
availableExtensionProperties[i].name
返回字符串。
这是struct
的定义方式
typedef struct Stuff {
char name[MAX_POSSIBLE_NAME];
...
...
} Stuff;
realloc(*gAvailableExtensions, sizeOfAvailableExtensionName);
应将大小为sizeOfAvailableExtensionName
的内存添加到*gAvailableExtensions
取消引用的数组。
memcpy(&(*gAvailableExtensions)[currentAvailableExtensionCount],
&availableExtensionProperties[i].name,
sizeOfAvailableExtensionName);
应从以下位置复制字符串(此sizeOfAvailableExtensionName
大量内存)
&availableExtensionPropterties[i].name
地址]
&(*gAvailableExtensions)[currentAvailableExtensionCount]
地址。
但是我不认为代码可以实现我认为应该的功能,因为出现此错误
realloc(): invalid next size Aborted (core dumped) ./Executable
编辑:完整代码
uint32_t populateAvailableExtensions(const char** gAvailableExtensions[]) { int currentAvailableExtensionCount = sizeof(*gAvailableExtensions) / sizeof(**gAvailableExtensions) - 1; void* reallocStatus; uint32_t availableExtensionCount = 0; vkEnumerateInstanceExtensionProperties( VK_NULL_HANDLE, &availableExtensionCount, VK_NULL_HANDLE); VkExtensionProperties availableExtensionProperties[availableExtensionCount]; vkEnumerateInstanceExtensionProperties( VK_NULL_HANDLE, &availableExtensionCount, availableExtensionProperties); for (int i = 0; i < availableExtensionCount; ++i) { size_t sizeOfAvailableExtensionName = sizeof(availableExtensionProperties[i].extensionName); reallocStatus = realloc(*gAvailableExtensions, sizeOfAvailableExtensionName); memcpy(&(*gAvailableExtensions)[currentAvailableExtensionCount], availableExtensionProperties[i].extensionName, sizeOfAvailableExtensionName); ++currentAvailableExtensionCount; } return currentAvailableExtensionCount; }
这是外部函数如何调用该函数,
uint32_t availableExtensionCount = 0; availableExtensions = malloc(0); availableExtensionCount = populateAvailableExtensions(&availableExtensions);
和
const char** availableExtensions;
在头文件中声明。
我有一个函数populateAvailableExtensions(const char ** gAvailableExtensions []),它使用一个指向字符串数组的指针。我使用malloc(0)将初始内存分配给该数组。规格说...
int currentAvailableExtensionCount =
sizeof(*gAvailableExtensions) / sizeof(**gAvailableExtensions) - 1;