C——指向指针数组的指针

标签 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 = "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* 而不是 struct pkt

由于您没有释放任何东西,因此存在严重的内存泄漏。

关于C——指向指针数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33317640/

相关文章:

clang : error: unknown argument: '-wall'

使用框架消息创建菱形

c - 数组指针存在的原因是什么?

javascript - 如何在Javascript中合并两个不同的数组?

c - 将指针传递给 C 中的函数

c - C语言从缓冲区读取数据

C - 将用户输入拆分为标记并在输出中识别/格式化它们

delphi - 组合多个 TBytes 数组的最佳方式

c - 指针或值

c - 指针指向的值在第一次取消引用后发生变化