C-指向指针数组的指针
我必须存储数据结构的指针。 所以,我需要一个指针数组 我创建了一个简单的示例,但收到了一个C-指向指针数组的指针,c,arrays,pointers,segmentation-fault,C,Arrays,Pointers,Segmentation Fault,我必须存储数据结构的指针。 所以,我需要一个指针数组 我创建了一个简单的示例,但收到了一个分段错误。 为什么我做不到 buf->data[i]=pkt #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #define MAX_SIZE 500000 #define MAX_CHAR 1024 char *string = "H
分段错误
。
为什么我做不到
buf->data[i]=pkt
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define MAX_SIZE 500000
#define MAX_CHAR 1024
char *string = "HelloHelloHello";
struct pkt {
char *buf;
int seq;
};
struct buffer {
int a;
int b;
struct pkt **data;
};
struct buffer *new_buffer() {
struct buffer *new;
new = malloc(sizeof(struct buffer) * MAX_SIZE);
if (new == NULL) {
perror("malloc(buffer)");
exit(EXIT_FAILURE);
}
struct pkt *data;
data = malloc(sizeof(struct pkt) * MAX_SIZE);
if (data == NULL) {
perror("malloc(data)");
exit(EXIT_FAILURE);
}
new->data = &data;
new->a = 0;
new->b = 0;
return new;
}
struct pkt *new_pkt(char *data, int seq) {
struct pkt *pkt;
pkt = malloc(sizeof(struct pkt));
if (pkt == NULL) {
perror("malloc(pkt)");
exit(EXIT_FAILURE);
}
pkt->buf = malloc(sizeof(char) * MAX_CHAR);
if (pkt->buf == NULL) {
perror("malloc(pkt->buf)");
exit(EXIT_FAILURE);
}
strncpy(pkt->buf, data, MAX_CHAR);
pkt->seq = seq;
return pkt;
}
void add_pkt(struct pkt *pkt, struct buffer *buf, int i) {
buf->data[i] = pkt; //segmentation fault
}
int main() {
struct buffer *my_buffer = new_buffer();
struct pkt *pkt;
int i;
for(i=0; i<MAX_SIZE; ++i) {
pkt = new_pkt(string, i);
add_pkt(pkt, my_buffer, i);
printf("[%d]", i);
}
return 0;
}
#包括
#包括
#包括
#包括
#定义最大尺寸500000
#定义最大字符1024
char*string=“hellohello”;
结构程序包{
char*buf;
内部顺序;
};
结构缓冲区{
INTA;
int b;
结构pkt**数据;
};
结构缓冲区*新缓冲区(){
结构缓冲区*new;
新=malloc(sizeof(结构缓冲区)*最大大小);
if(new==NULL){
perror(“malloc(缓冲区)”);
退出(退出失败);
}
结构pkt*数据;
数据=malloc(sizeof(struct pkt)*最大尺寸);
如果(数据==NULL){
perror(“malloc(数据)”);
退出(退出失败);
}
新建->数据=&数据;
新建->a=0;
新建->b=0;
归还新的;
}
结构组件*新组件(字符*数据,整数顺序){
结构pkt*pkt;
pkt=malloc(sizeof(struct-pkt));
如果(pkt==NULL){
perror(“malloc(pkt)”);
退出(退出失败);
}
pkt->buf=malloc(sizeof(char)*MAX_char);
如果(pkt->buf==NULL){
perror(“malloc(pkt->buf)”;
退出(退出失败);
}
strncpy(pkt->buf,数据,最大字符);
pkt->seq=seq;
返回包装;
}
void add_pkt(struct pkt*pkt,struct buffer*buf,int i){
buf->data[i]=pkt;//分段错误
}
int main(){
struct buffer*my_buffer=new_buffer();
结构pkt*pkt;
int i;
对于(i=0;i变化
到
struct pkt*data;
是一个局部变量,保存其地址并在作用域结束后使用它是未定义的行为。另外,您需要一个内存区域,可以在其中保存一些struct pkt*
s,而不是struct pkt
s
因为你没有空闲
任何东西,你有一个很大的内存泄漏。也许你应该把内存分配给数据
。我刚刚用data=malloc(sizeof(…);
和new->data=&data
无需进行快速调试,DCV。
struct pkt *data;
data = malloc(sizeof(struct pkt) * MAX_SIZE);
if (data == NULL) {
perror("malloc(data)");
exit(EXIT_FAILURE);
}
new->data = &data;
new->data = malloc(sizeof(struct pkt*) * MAX_SIZE);
if (new->data == NULL) {
perror("malloc(new->data)");
exit(EXIT_FAILURE);
}