#define宏导致分段错误或导致段错误的其他原因?

时间:2016-10-24 05:57:06

标签: c macros

我正在使用libnfs代替C.我正在调用nfs_read,它将字节大小作为uint64_t变量读取。我将大小定义为宏(#define 100)。对于大于24的任何大小值,我主要得到一个段错误(或者有时基于我选择的值的其他错误,但对于特定值总是相同的错误)。我也尝试将#define更改为全局uint64_t。我首先将它放在头文件中,并将其从头文件移动到c文件。但结果总是相同的(如果大小大于24),segfault。

但是当我直接将值(作为硬编码值)传递给函数nfs_read时,对于任何大小的值(< 24或> 24),我都不会得到段错误。

我之前在C中完成了相当数量的项目,并且从未遇到过这样的错误。不知道这里会发生什么。感谢。

typedef struct {
  int is_nfs;
  int fd;
  struct nfs_context *nfs;
  struct nfsfh *fh;
}nfs_fd_t;

#define COUNT 100

// The open function is same as in the linked example except for I added nfs_dd_t struct to store nfs and fh
int dd_open(const char *path, int flags, mode_t mode, nfs_fd_t *nfs_fd);

ssize_t read_wrapper(nfs_dd_t *nfs_fd)
{
   char * buf = malloc(COUNT);
   int ret = dd_read(nfs_fd, buf, COUNT);
   // follow up logic
}

ssize_t dd_read(nfs_fd_t *nfs_fd, void *buf, uint64_t count)
{
  int ret;

  if ((ret = nfs_read((*nfs_fd).nfs, (*nfs_fd).fh, count, (char *)buf)) < 0) {
    errno = -ret;
    return -1;
  }
  return ret;
}

nfs_dd_t是一个包含nfs和fh的结构。我基本上只是根据我的需要对this example进行了略微修改。

0 个答案:

没有答案