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++);
}
}发布于 2010-11-30 16:43:24
由于您只有一次分配来创建整个devname数组,因此您只需要检查该数组中的NULL,并且只需要释放该数组。当您浏览devname时,每个条目实际上都是一个struct Devices_names,而不是一个指针,所以它不能与NULL进行比较,也不能以任何有意义的方式释放。在这种情况下,您需要一个单独的变量来跟踪有多少个条目:
for (i = 0; i < devname_count; i++) {
printf("Device id --- [ %d ]\n", devname[i].id);
printf("Device name - [ %s ]\n", devname[i].name);
}
...
free(devname);
devname = NULL;
devname_count = 0;发布于 2010-11-30 16:44:42
devname[i]不是一个指针,它是一个struct Devices_names,因此比较没有意义。
发布于 2010-11-30 16:44:57
你在哪里写:
for(i = 0; devname[i] != NULL; i++) { <-- ERROR HERE您测试的是空的Device_names实例,而不是指针。如果您有一个指向Device_names的指针数组,那就很好了。
另一个问题是您只分配了一个Device_names,所以没有它们的数组。
https://stackoverflow.com/questions/4311868
复制相似问题