Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有malloc语法错误的函数?_C_Function_Malloc - Fatal编程技术网

具有malloc语法错误的函数?

具有malloc语法错误的函数?,c,function,malloc,C,Function,Malloc,我对使用指针还不熟悉,我不知道为什么这不起作用。如果我在scan功能中打印,它可以工作,但必须在单独的功能中 #include <stdio.h> #include <stdlib.h> int scan(int n, int *buffer) { int i; printf("nr of elements:\n"); scanf("%d", &n); //int *buffer, i=0; // *buffer=(int*

我对使用指针还不熟悉,我不知道为什么这不起作用。如果我在
scan
功能中打印,它可以工作,但必须在单独的功能中

#include <stdio.h>
#include <stdlib.h>
int scan(int n, int *buffer)
{
    int i;
    printf("nr of elements:\n");
    scanf("%d", &n);
    //int *buffer, i=0;
    // *buffer=(int*)malloc((*n) * sizeof(int));
    buffer = malloc((n + 1) * sizeof(*buffer));
    for(i=0; i<n; i++){
         buffer[i]=i+1;
         printf ("%d ", buffer[i]);}
         printf ("\n-------------\n");   
 }

 void print(int *n,int *buffer){
    int i;
    for(i=0; i<n; i++){
       printf ("%d ", buffer[i]);}
 }

 int main()
 {
    int n,i, *buffer;
    scan(&n, &buffer);
    print(n, *buffer);

    printf("i quit\n");
    for(i=0; i<n; i++){
       printf ("%d ", buffer[i]);
    }
    return 0;
}
#包括
#包括
整数扫描(整数n,整数*缓冲区)
{
int i;
printf(“元素数量:\n”);
scanf(“%d”和“&n”);
//int*缓冲区,i=0;
//*缓冲区=(int*)malloc((*n)*sizeof(int));
缓冲区=malloc((n+1)*sizeof(*缓冲区));

对于(i=0;i有两种改变函数参数的方法(改变函数外的数据):

1) 使用引用(在我的示例中-scan函数的第一个参数)

2) 使用指针(在我的示例中-scan的第二个参数…此参数的类型为int*)

试试这个(我的评论显示了变化):

#包括
#包括
void scan(int&n,int**buffer)//指针指向bufer的指针,函数为void而不是int,n为int
{
int i;
printf(“元素数量:\n”);
scanf(“%d”和“&n”);
*buffer=(int*)malloc(n*sizeof(**buffer));//(int*)应该是,并且*buffer
对于(i=0;i而言,使用(稍微)更具描述性的变量名有助于充分明确扫描中的“n”与打印中的“n”不同:

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

void scan(int *np, int **bufferp)
{
    int i;
    printf("nr of elements:\n");
    scanf("%d", np);

    *bufferp = (int*)malloc(*np * sizeof(**bufferp));
    for(i=0; i < *np; i++){
      (*bufferp)[i] = i + 1;
      printf ("%d ", (*bufferp)[i]);
    }
    printf ("\n-------------\n");
 }

 void print(int n, int *buffer){
    int i;
    for(i=0; i<n; i++){
       printf ("%d ", buffer[i]);
    }
    printf("\n");
 }

 int main()
 {
    int n, i, *buffer;
    /* pass references to n and buffer for scan to modify */
    scan(&n, &buffer);
    print(n, buffer);
    return 0;
}
#包括
#包括
无效扫描(int*np,int**bufferp)
{
int i;
printf(“元素数量:\n”);
scanf(“%d”,np);
*bufferp=(int*)malloc(*np*sizeof(**bufferp));
对于(i=0;i<*np;i++){
(*bufferp)[i]=i+1;
printf(“%d”,(*bufferp)[i]);
}
printf(“\n-------------\n”);
}
无效打印(整数n,整数*缓冲区){
int i;
对于(i=0;i可以使用void返回类型声明scan(),并显示数据本身。

或者,如果希望函数返回int,则不要在函数中打印它,而是返回值并在main()中显示它。这样应该可以正常工作。

scan()
没有返回值,而您声明它返回
int
您使用的编译器是什么?您是否在上述代码中收到任何编译器警告/错误?如果收到,请注意它们。如果没有,则是时候更改编译器了。您只需要
打印(n,缓冲区);
您正在执行
扫描(&n..)
,传入指向int的指针,然后将该指针视为函数中的整数,然后使用
scanf(…,&n)
malloc获取进一步的指针(n
也将分配与指针大小相同的ram。例如,如果主
n
位于地址12345678,则将占用12.3兆ram。“不工作”不是一个有效的问题描述。请阅读C++中的引用WOKR,因此将文件重命名为*.CPP并使用G++。我刚刚解释了两个不同的选项。