读书人

c 结构体分配内存,该怎么处理

发布时间: 2012-04-08 14:38:30 作者: rapoo

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);

探讨

psect->name[0],psect->name[1] ...
在内存中是连续存储的吗
我可以像下面这样直接都给分配了吗
psect->name=malloc(256);

[解决办法]
pNetParam->name=malloc(5);
pNetParam->value=malloc(5);
[解决办法]
再上面那个代码你的pNetParam->name和pNetParam->value没有分配内存空间。分配pNetParam->name[i]肯定会出错。而这里改成数组,就是已经分配了23个空间了。
[解决办法]
C/C++ code
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]);
[解决办法]
C/C++ code
#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是指向指针的指针,也是指针,没有分配内存。不能赋值,像这种的,初学最好还是用数组的好!指针是方便,但是对于新手来说很有难度的!

读书人网 >C语言

热点推荐