Struct 两个结构,一个引用另一个
我想知道为什么此函数Struct 两个结构,一个引用另一个,struct,Struct,我想知道为什么此函数无效地籍无线电(R\u cidade**q)不打印数据您为主要结构分配的存储,而不是次要结构。改变 typedef struct Radios_Frequencia { char tipo_radio[3]; int qt_radio; int frequencia; }Radiof; typedef struct Radio_Cidade { char nome_cidade[30]; char nome_radio[30];
无效地籍无线电(R\u cidade**q)
不打印数据您为主要结构分配的存储,而不是次要结构。改变
typedef struct Radios_Frequencia {
char tipo_radio[3];
int qt_radio;
int frequencia;
}Radiof;
typedef struct Radio_Cidade {
char nome_cidade[30];
char nome_radio[30];
char dono_radio[3];
int numero_horas;
int audiencia;
Radiof *fre;
}R_cidade;
void Cadastrar_Radio(R_cidade**q){
printf("%d\n",i);
q[0]=(R_cidade*)malloc(sizeof(R_cidade));
printf("informa a frequencia da radio\n");
scanf("%d",&q[0]->fre->frequencia); //problem here
printf("%d\n",q[0]->fre->frequencia); // problem here
}
致:
这将分配两者。如果没有这一点,
fre
很有可能指向never never land(如“由于它是未定义的行为,您永远无法知道将发生什么)。您已经分配了一些存储,但尚未正确初始化任何存储
只有将可靠的值放入结构中,才能得到可靠的打印内容
此外,还指出,您已经为R\u cidade
结构分配了空间,但没有为它的Radiof
组件分配空间。您正在使用scanf()
将一个值读入尚未分配的空间;这是不可靠的-最多是未定义的行为,但通常是内核转储时间
请注意,尽管这两种类型是链接的,但C编译器肯定不会对Radiof
进行任何分配,因为R\u-cidade
提到了它。它无法判断R\u-cidade
中的指针是指向单个结构还是指向一个结构数组的开头,因此无法判断如何分配要分配的空间太多。此外,您可能不希望每次都初始化该结构-您可能会很高兴没有指向任何地方(空指针),除非在某些只有您知道的特殊情况下
您还应该验证内存分配是否成功,或者使用一个内存分配器来保证永远不会返回空指针或无效指针。通常,这可能是标准malloc()
函数的覆盖函数:
q[0]=(R_cidade*)malloc(sizeof(R_cidade));
q[0]->fre = malloc(sizeof(Radiof));
q[0]=(R_cidade*)malloc(sizeof(R_cidade));
q[0]->fre = malloc(sizeof(Radiof));
#undef NDEBUG
#include <assert.h>
void *emalloc(size_t nbytes)
{
void *space = malloc(nbytes);
assert(space != 0);
return(space);
}
#include "stderr.h"
void *emalloc(size_t nbytes)
{
void *space = malloc(nbytes);
if (space == 0)
err_error("Out of memory\n");
return space;
}