调用函数时出错(指针和向量)

时间:2012-07-01 04:14:47

标签: c vector warnings ansi initialization

假设在main中我有一个函数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 个答案:

答案 0 :(得分:0)

查看您的修改: 您需要在某处使用malloc命令分配内存。

msg = (char *)malloc(sizeof(char) * atLeastThree);

现在已经分配了msg,它可以被推送到你的insere_msg函数和你的函数中。

您还应该实现这个更“安全”的代码:

void a(char * v, unsigned int sizeofV){
    if(NULL != v && sizeofV >= 3){
        v[0] = 1;
        v[2] = 2;
    }else{
        printf("array v is either not allocated or not of proper size");
    }
}

在操作指针所指向的数据之前,你真的应该检查以确保点类型已经初始化并且它对于你想要追求的函数是有效的吗?

现在,如果你没有分配内存,这将无法解决问题,只会让它不会出错。

如果你想拥有偶数SAFER代码,你将传入未分配的指针,让函数分配并返回大小。这里唯一的问题是调用者负责释放内存。

unsigned int a(char * v){

    v = (char *)malloc(sizeof(char) * Necessity);

    if(NULL != v){
        v[0] = 1;
        v[2] = 2;
    }else{
        printf("array v is either not allocated or not of proper size");
    }

    return Necessity;
}