gcc 4.4.4 c89callocを使用してメモリを割り当てて解放する
私はテストしているプログラムを持っています。私はdevnameという構造体オブジェクトを作成し、要素を埋めることができるようにメモリを割り当てます。私はそれらを表示し、割り当てられたメモリを解放します。
invalid operands to binary != (have ‘struct Devices_names’ and ‘void *’)
構造要素を表示するためのループのための私である:
しかし、私は、次のエラーを取得しています。しかし、私はNULLポインタをテストしていると感じています。
ちょっと質問がありますが、無料で問題がありますか?あなたが唯一の全体devname
配列を作成する一つの割り当てを持っているので、どんなアドバイスを
多くのおかげで、
#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++);
}
}
私は以下のdevnameを=はcalloc(デバイス、sizeof演算子*のDEVNAME)を行ったとき。私はヒープ上に5つのdevnameオブジェクトを作成していると思った。だから私はそれらの5つすべてを解放しなければならないだろう。しかし、割り当てられたオブジェクトは1つしかないと言っていますか?ありがとう。 – ant2009
5つのオブジェクトに対して* space *を作成していますが、実際には1つの連続したチャンクしか割り当てていません。経験則として、 'malloc()'または 'calloc()'の各呼び出しは、 'free()'を1回呼び出すだけで一致しなければなりません。 –
ありがとう、私はそれを覚えています。簡単なルールのように聞こえる。 – ant2009