当我使用这段代码时,不是直接从init()调用malloc(),而是在Windows 8下显示错误消息。 标准信息“程序......停止工作”。
我的一些程序在Windows 8下生成相同的内容。在Linux下,一切都很好。 win8的C语言不兼容ANSI吗?
FILE *dumpfile;
double *cx;
void init_var(double *ptr) {
ptr = malloc (L*sizeof(double));
for (i=0; i<L; i++) ptr[i] = (double) i;
}
void init() {
// cx = malloc (L*sizeof(double));
// for (i=0; i<L; i++) cx[i] = i;
init_var(cx);
dumpfile = fopen( "dump.txt", "w" );
}
UPD。 Aaaaargh。我现在明白了。
答案 0 :(得分:1)
您正在函数内部重新分配函数参数,但这并不会更改调用者上下文中的参数。这是因为C是按值调用。
您必须通过init_var()
cx
的地址才能更改它:
void init_var(double **ptr)
{
*ptr = malloc(L * sizeof **ptr);
/* ... */
}
void init(void)
{
init_var(&cx);
}