假设我有一个函数a
:
a(c);
c
的定义如下:
char* c.
函数a实际上是这样的:
void a(char* v)
{
v[0] = 1;
v[1] = 2;
}
这是错误的吗?因为程序说c
在这个函数中未初始化。
编辑:更多代码:
byte* msg;
insere_msg(t_msg, argv[2], msg);
void insere_msg(int size, char name[MAX], byte* v)
{
FILE *fp;
int i = 10;
int n = 0;
char aux;
v[0] = (byte) 4;
v[1] = (byte) 8;
v[2] = (byte) 15;
v[3] = (byte) 16;
v[4] = (byte) 23;
v[5] = (byte) 42;
v[6] = (byte) size>>(3*8);
v[7] = (byte) size>>(2*8);
v[8] = (byte) size>>(1*8);
v[9] = (byte) size;
fp = fopen(name, "r");
while(n < size)
{
fscanf(fp, "%c", &aux);
v[i] = (byte) aux;
i++;
n++;
}
}
1条答案
按热度按时间zxlwwiss1#
查看您的编辑:您需要在某处使用malloc命令分配内存。
现在msg已经分配好了,可以将它推送到insere_msg函数和a函数中。
你还应该实现这个更“安全”的代码:
你真的应该检查,以确保一个点类型已被初始化,它是有效的,为目的的函数,你试图追求,在你操作的数据被指向的指针!!!
现在,如果你没有分配内存,这不会解决问题,它只会防止它出错。
如果你想要EVEN SAFER代码,你将传入未分配的指针,让函数分配并返回大小。这里唯一的事情是,调用者负责释放内存。