gpt4 book ai didi

c - 错误 : conflicting types for ‘malloc’

转载 作者:行者123 更新时间:2023-12-04 10:54:46 24 4
gpt4 key购买 nike

我收到以下脚本错误和警告:

rfixpro.c:7:14: error: conflicting types for ‘malloc’
char *p, malloc();
^
rfixpro.c:9:7: warning: assignment makes pointer from integer without a cast [enabled by default]
p = malloc(n);

这是我尝试使用 make 安装的程序的一部分。我以前从未使用过 C++,所以请原谅我的无知。我试图在没有“include”行的情况下运行脚本,但这会产生其他警告。因此,我也发布了整个脚本。

#include <stdio.h>
#include <stdlib.h>

char * emalloc (n)
unsigned n;
{
char *p, malloc();

p = malloc(n);
if (p == NULL)
printf ("out of memory\n");
return p;
}


int rfixpro (ns, pH, beta, pKint, ida, g, cutoff, cs, tot)
int ns; /* Number of titratable sites */
float pH;
float beta; /* 1 / kT */
float pKint[]; /* Intrinsic pK of sites (input) */
int ida[]; /* ida=1 for cation 2 for anion (input) */
float g[]; /* site - site interaction matrix (input) */
float cutoff; /* Cutoff value for fixing sites (input) */
float cs[]; /* degree of protonation of sites (output) */
float *tot; /* total protonation (output) */
{
int nsr; /* Number of sites in reduced set */
int *fprot; /* = 1 or 0 if fixed prot or deprot = -1 if unfixed */
int *rmap; /* rmap[i] = full set index of reduced set site i */
int *fmap; /* fmap[i] = reduced set index of full set site i */
/* fmap[i] = -1 if i not in reduced set */
float *pKintr; /* Intr. pKs for reduced set */
int *idar; /* Reduced form of ida */
float *gr; /* Reduced form of g */
float *csr; /* Reduced form of cs */
int i;

fprot = (int *) emalloc ((unsigned) ns * sizeof (int));
rmap = (int *) emalloc ((unsigned) ns * sizeof (int));
fmap = (int *) emalloc ((unsigned) ns * sizeof (int));
pKintr = (float *) emalloc ((unsigned) ns * sizeof (float));
idar = (int *) emalloc ((unsigned) ns * sizeof (int));
gr = (float *) emalloc ((unsigned) ns*ns * sizeof (float));
csr = (float *) emalloc ((unsigned) ns * sizeof (float));

pfix (ns, pH, beta, pKint, ida, g, cutoff,
&nsr, fprot, rmap, fmap, pKintr, idar, gr);
tc (nsr, pKintr, idar, gr, pH, beta, csr);
*tot = 0.0;
for (i=0; i<ns; ++i)
{
if (fmap[i] != -1)
cs[i] = csr[fmap[i]];
else
cs[i] = (float) fprot[i];
*tot += cs[i];
}

free ( (char *) fprot);
free ( (char *) rmap);
free ( (char *) fmap);
free ( (char *) pKintr);
free ( (char *) idar);
free ( (char *) gr);
free ( (char *) csr);

return (nsr);
}

最佳答案

这只是老式的 K&R C 代码。

char * emalloc (n)
unsigned n;
{
char *p, malloc();

p = malloc(n);
if (p == NULL)
printf ("out of memory\n");
return p;
}

只是 malloc() 的包装器。我认为这个

char *p, malloc();

应该malloc() 原型(prototype)以及 char *p。虽然它似乎声明malloc()返回一个char,因为

char *p, malloc();

相当于

char *p;
char malloc();

这是永远不要在每一行中定义一个以上变量的一个很好的理由。您不是在教科书中保存代码行。它看起来像是一个严重的错误,这就是为什么我只是说我认为它应该malloc() 的原型(prototype)——它根本不应该工作如果它像在我曾经使用过的任何硬件和 C 编译器上所做的那样截断指向 char 的指针。

正是 char malloc() 原型(prototype)导致您得到 error: conflicting types for ‘malloc’ 错误。

请注意,您不能简单地绕过并替换

int rfixpro (ns, pH, beta, pKint, ida, g, cutoff, cs, tot)
int ns; /* Number of titratable sites */
float pH;
float beta; /* 1 / kT */
float pKint[]; /* Intrinsic pK of sites (input) */
int ida[]; /* ida=1 for cation 2 for anion (input) */
float g[]; /* site - site interaction matrix (input) */
float cutoff; /* Cutoff value for fixing sites (input) */
float cs[]; /* degree of protonation of sites (output) */
float *tot; /* total protonation (output) */
{
...

int rfixpro ( int ns, float pH, float beta, float pKint[],
int ida[], float g[], float cutoff, float cs[], float *tot)
{

因为这会破坏事情,除非您在使用该函数之前还为该函数的每个调用提供适当的声明。我似乎记得彼得·范德林登 (Peter van der Linden) 的一本书中有一段很长的描述,说明这样做会造成什么破坏。

关于c - 错误 : conflicting types for ‘malloc’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47794084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com