c 结构体分配内存
现在有一个结构体
typedef struct _PSECTION {
int num;
char **name;
char **value;
}PSECTION;
PSECTION *psect;
psect=(PSECTION *)malloc(sizeof(PSECTION ));
strcpy(psect->name[0], "abcd");
这样写 段错误了
能给解释下是怎么回事吗
[解决办法]
虽然psect初始化了,但是不代表name和value也初始化了。
[解决办法]
name[0] = malloc();
[解决办法]
也可以考虑使用数组
[解决办法]
用for循环吧···
psect->name[i]=malloc(256);
pNetParam = (PSECTION *)malloc(sizeof(PSECTION)); pNetParam->num = 5; pNetParam->value = (char **)malloc(5*sizeof(char*));//初始化 pNetParam->name = (char **)malloc(5*sizeof(char*)); for(i = 0; i < pNetParam->num; i++) { pNetParam->name[i] = malloc(32); pNetParam->value[i] = malloc(32); }strcpy(pNetParam->value[0], "abcd");printf("pNetParam->value[0] = %s\n", pNetParam->value[0]);
[解决办法]
#include<stdio.h>#include<malloc.h>#include<string.h>struct SA{ int num; char **name; char **value;};int main(){ SA *ps; ps = (SA*)malloc(sizeof(SA)); ps->num = 32; ps->name = (char**)malloc(sizeof(char*) * ps->num);//先分配32个指针数组空间 strcpy(ps->name[0] = (char*)malloc(sizeof("abcd")),"abcd");//先分配name[0]的空间再复制 printf("%s\n",ps->name[0]); return 0;}
[解决办法]
注意有没有内存空间就行了。
[解决办法]
name是指向指针的指针,也是指针,没有分配内存。不能赋值,像这种的,初学最好还是用数组的好!指针是方便,但是对于新手来说很有难度的!