[英]C - pointer to array of 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 = "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;
}
改變
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);
}
struct pkt *data;
是一個局部變量,保存它的地址並在作用域結束后使用它,是未定義的行為。 您還需要一個內存區域,您可以在其中保存一些struct pkt*
s 而不是struct pkt
s。
因為你沒有free
任何東西,所以你有一個很大的內存泄漏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.