【问题标题】:How to access address of an array that is contained in a struct?如何访问结构中包含的数组的地址?
【发布时间】:2013-10-06 21:36:41
【问题描述】:

我正在尝试创建一个使用 getline 从输入文件中读取的程序。

我创建了以下结构

struct misc_struct {
   char *buf;
   FILE *some_input_file;
};

在我的主文件中,我创建了一个缓冲区和多个 pthread。

char buf[1024];
FILE *some_input_file;
struct misc_struct *pthread_arguments;
...
pthread_arguments = (struct misc_struct *)malloc(sizeof(struct misc_struct));
pthread_arguments->buf = buf;
pthread_arguments->some_input_file = some_input_file;
pthread_create(&t1, NULL, start, (void *)pthread_arguments);

现在在我的启动函数中:

void *start(void *args)
{
    size_t len;
    struct misc_struct *pthread_arguments = (struct misc_struct *)pthread_arguments;
    getline(&args->buf,&len,args->some_input_file);
    ...
}

不幸的是,我在这个 getline() 调用中崩溃了。我在访问 args->buf 时没有问题,但是当我需要将 &args->buf 用于 getline 函数时,它会因“未分配重新分配的指针”而崩溃

我应该做些什么不同的事情?谢谢!

【问题讨论】:

    标签: c struct pthreads


    【解决方案1】:
    char buf[1024];
    :
    :
    :
    pthread_arguments->buf = buf;
    
    getline(&args->buf,&len,args->some_input_file);
    

    我怀疑getline() 期望能够释放并重新分配给定的缓冲区。

    最好给getline()一个指向空缓冲区的指针,以便它可以根据需要分配它。

    pthread_arguments->buf = 0;
    

    【讨论】:

    • 感谢您的回复。这是有道理的,但我还有第二个 pthread 需要允许访问同一个缓冲区,所以我认为预分配缓冲区是必要的?
    • 您希望线程共享缓冲区吗?这让我觉得很不寻常。但如果是这种情况,请确保所有对 getline() 的调用都获得相同的 char** 参数。
    • 我怀疑这就是你想要的。当线程开始写入同一个缓冲区时,所有的地狱都会崩溃。
    • 感谢您的帮助!
    猜你喜欢
    • 2012-04-23
    • 1970-01-01
    • 2018-06-08
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多