gcc 4.4.4 c89
我有一个正在测试的程序。我创建了一个名为devname的struct对象,并分配内存以便填充其元素。我显示它们,然后释放已分配的内存。
然而,我遇到了以下错误:
invalid operands to binary != (have ‘struct Devices_names’ and ‘void *’)
这是我用于显示结构元素的for循环。然而,我感觉我正在测试一个空指针。
还有一个问题,释放内存时是否存在问题?
非常感谢任何建议。
#include <stdio.h>
#include <stdlib.h>
static struct Devices_names {
#define MAX_NAME_LEN 80
int id;
char name[MAX_NAME_LEN];
} *devname;
static void g_create_device_names(size_t devices);
static void g_get_device_names();
static void destroy_devices();
int main(void)
{
#define DEVICES 5
g_create_device_names(DEVICES);
g_get_device_names();
destroy_devices();
return 0;
}
static void g_create_device_names(size_t devices)
{
size_t i = 0;
devname = calloc(devices, sizeof *devname);
if(devname == NULL) {
exit(0);
}
for(i = 0; i < devices; i++) {
devname[i].id = i;
sprintf(devname[i].name, "device: %d", i);
}
}
static void g_get_device_names()
{
size_t i = 0;
for(i = 0; devname[i] != NULL; i++) { <-- ERROR HERE
printf("Device id --- [ %d ]\n", devname[i].id);
printf("Device name - [ %s ]\n", devname[i].name);
}
}
static void destroy_devices()
{
while(devname != NULL) {
free(devname++);
}
}
malloc()
或calloc()
都应该与一次free()
对应。 - Justin Spahr-Summers