获取无效的初始化错误

时间:2014-02-02 15:24:48

标签: c

为什么我收到以下代码的“无效的初始化程序错误”?

#include<stdio.h> 
#include<malloc.h>

int main(){
    int i = 2;
    int j;
    for(j = i ; j < 20; j++){
        char *p[5] = malloc(20 * sizeof(char));
        int len = 0;
        p[0] = 'a';
    }
    return 0;
}

1 个答案:

答案 0 :(得分:6)

你有一个指针数组,而你只指定了一个指针:

char *p[5] = malloc(20 * sizeof(char));

请改用:

char *p = malloc(20 * sizeof(char));

如果你真的想要一个指针数组,但只设置它们中的第一个,这应该是你的代码:

char *p[5] = {malloc(20 * sizeof(char))};

(或者更好:char *p[5] = {0}; p[0] = malloc(20 * sizeof(char));

如果这是您想要的,您必须以不同的方式将字母'a'设置为 - 使用*(p[0]) = 'a';代替。

此外:你不再释放你的记忆。您应该使用free(p);来执行此操作,否则您的程序可能会消耗越来越多的内存。

对于小程序,这没有问题,因为操作系统在程序关闭后无论如何都会释放内存。

但这是不好的做法,以及许多不良软件的原因。