kev*_*iss 0 c arrays struct pointers
我有一个基本的问题,我不能为我的生活弄清楚.新来的C所以请耐心等待.
首先,我创建一个结构数组:
struct rule {
int *in; /* ingress flag */
int *out; /* egress flag */
char *actionvalue; /* actionvalue BLOCK or UNBLOCK */
char *proto; /* protocol e.g. UDP TCP ICMP */
char *ip_src; /* source and dest address */
int *srcport; /* src port */
char *net_src; /* source and dest netmask */
char *ip_dst; /* source and dest address */
int *dstport; /* dst port */
char *net_dst; /* source and dest netmask */
} rulelist[10];
Run Code Online (Sandbox Code Playgroud)
然后我为它们分配值
rulelist[policy_count].in = strsep(&temp, delims);
rulelist[policy_count].out = strsep(&temp, delims); etc...
Run Code Online (Sandbox Code Playgroud)
然后我可以毫无问题地访问它们
printk("%s", rulelist[policy_count].in);
但是当我去访问数组时,数组稍后会在另一个函数的代码中.
printk("%s", rulelist[policy_count].in);
会崩溃,就像它取消呈现一个空指针一样.
我已经阅读了很多关于初始化而不是分配的内容,但是每个例子都是不同的,我似乎无法很好地掌握它.
我也不明白我怎么能立即访问它然后不能在一个不同的功能.结构是全局声明的,所以我不相信它的范围问题.
谢谢
该函数strsep返回一个指针temp.一旦temp变为无效(例如,当其范围结束时)rulelist[policy_count].in将指向无效的内存.
所以你应该malloc有一些内存并复制数据.但是既然你正在使用strsep那里你很有可能strdup:
char *p = strsep(&temp, delims);
rulelist[policy_count].in = strdup(p);
Run Code Online (Sandbox Code Playgroud)