c 结构体分配内存

yel617 2012-03-27 11:17:43
现在有一个结构体
typedef struct _PSECTION {
int num;
char **name;
char **value;
}PSECTION;
PSECTION *psect;

psect=(PSECTION *)malloc(sizeof(PSECTION ));

strcpy(psect->name[0], "abcd");
这样写 段错误了
能给解释下是怎么回事吗
...全文
195 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxmuyu 2012-03-27
  • 打赏
  • 举报
回复

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]);
sundayX 2012-03-27
  • 打赏
  • 举报
回复
再上面那个代码你的pNetParam->name和pNetParam->value没有分配内存空间。分配pNetParam->name[i]肯定会出错。而这里改成数组,就是已经分配了23个空间了。
yel617 2012-03-27
  • 打赏
  • 举报
回复
找到问题了
写成指针数组就可以了,谁能给解释下吗?
typedef struct _PSECTION {
int num;
char *name【32】;
char *value【32】;
}PSECTION;
sundayX 2012-03-27
  • 打赏
  • 举报
回复
pNetParam->name=malloc(5);
pNetParam->value=malloc(5);
yel617 2012-03-27
  • 打赏
  • 举报
回复
pNetParam = (PSECTION *)malloc(sizeof(PSECTION));
pNetParam->num = 5;
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]);
我这样写着还是段错误啊
蓝枫10 2012-03-27
  • 打赏
  • 举报
回复
用for循环吧···
psect->name[i]=malloc(256);
[Quote=引用 3 楼 yel617 的回复:]

psect->name[0],psect->name[1] ...
在内存中是连续存储的吗
我可以像下面这样直接都给分配了吗
psect->name=malloc(256);
[/Quote]
sundayX 2012-03-27
  • 打赏
  • 举报
回复
也可以考虑使用数组
yel617 2012-03-27
  • 打赏
  • 举报
回复
psect->name[0],psect->name[1] ...
在内存中是连续存储的吗
我可以像下面这样直接都给分配了吗
psect->name=malloc(256);
qq120848369 2012-03-27
  • 打赏
  • 举报
回复
name[0] = malloc();
pengzhixi 2012-03-27
  • 打赏
  • 举报
回复
虽然psect初始化了,但是不代表name和value也初始化了。
HeFaQ123 2012-03-27
  • 打赏
  • 举报
回复
name是指向指针的指针,也是指针,没有分配内存。不能赋值,像这种的,初学最好还是用数组的好!指针是方便,但是对于新手来说很有难度的!
星爷是我哥 2012-03-27
  • 打赏
  • 举报
回复
注意有没有内存空间就行了。
HAHSIYUAN 2012-03-27
  • 打赏
  • 举报
回复

#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;
}

这样运行就没有问题了。
我觉得应该先分配好指针数组的空间,然后再给每一个字符指针分配其指向的字符串的空间。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧