新动态记忆"第一次"

Ala*_*min 0 c dynamic-memory-allocation

为什么错误

#include <stdio.h>

int main(void)
{
    int *p, size, i;
    FILE *fp;

    fp = fopen("input.txt","r");
    fscanf(fp, "%d", &size);

    p = (int*)malloc(size*sizeof(int));  //error
    for (i = 0; i <size; i++)
        fscanf(fp, "%d", &p[i]);

    for (i = size-1; i>= 0; i--)
        printf("%d\n", p[i]);

    free(p);
    fclose(fp);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在ubuntu上使用"Geany"

并在Geany编译器上:

fileName.c:11:2:警告函数'malloc'的隐式声明[-Wimplicit-function-declatation] fileName.c:11:12:警告:内置函数'malloc'的不兼容隐式声明[默认启用] fileName.c:18:12:warning:函数'free'的隐式声明[-Wimplicit-function-declaration] fileName.c:18:12:警告:内置函数'free'的不兼容隐式声明[enabled-by默认]编译成功完成

Tux*_*ude 6

你错过了以下标题包括:

#include <stdlib.h>
Run Code Online (Sandbox Code Playgroud)

原型malloc和for freestdlib.h你错过的头文件中定义.

如果您不确定要为某些标准C函数包含哪些头文件,您可以随时使用man它来计算出来.

对于这种情况,man malloc会显示要包含的必需头文件.

顺便说一下,在你的代码中,你没有检查是否fp已经过NULLfopen.

fopen 如果文件不存在或您没有打开文件的权限(在您的情况下阅读),可以并且将会失败.

fp = fopen("input.txt","r");
if (fp == NULL)
{
    printf("Error opening input.txt\n");
    return -1;
}
Run Code Online (Sandbox Code Playgroud)