为什么我收到以下代码的“无效的初始化程序错误”?
#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;
}
答案 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);
来执行此操作,否则您的程序可能会消耗越来越多的内存。
对于小程序,这没有问题,因为操作系统在程序关闭后无论如何都会释放内存。
但这是不好的做法,以及许多不良软件的原因。