返回指针本身

时间:2018-07-07 09:17:59

标签: c segmentation-fault return-value void-pointers

我的编码分配与它的头文件一起出现,这意味着我们需要使用相同的数据类型,并且没有任何不同。 有很多指针,(主要是很多void *)。意思是令人困惑,而不是困难。 我们必须做一个单独的函数,只是增加一个指针引用的值。但是鉴于程序的性质,我不想不断提出新的建议。

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void* intal_create(const char* );
void* intal_increment(void* );

void *intal_create(const char* str)
{
    int a;
    a=atoi(str);
    return &a;
}

void *intal_increment(void *intal)
{
    int *a= (int *)intal;//new pointer;
    ++*a;
    //value referenced has been incremented;
    *(int *)intal=*a;
    return intal;
}

int main()
{
    int * x;// void * return a pointer, need a pointert to int to pick it up
    char *dummy;
    gets(dummy);
    x=(int *)intal_create(dummy);
    printf("integer return is %d\n",*(int *)x);
    printf("address stored is %p\n",(int *)x);
    x=(int *)intal_increment(x);
    printf("integer return is %d\n",*(int *)x);
    printf("address stored is %p\n",(int *)x);
}

我希望x是调用的参数,并且还希望它存储返回值。 printf地址仅供我理解。

分段错误永远不会结束,据我了解,我只是返回一个指针,并要求一个指针停止返回指针

1 个答案:

答案 0 :(得分:0)

通过合并所有注释。主要是在传递给get()函数之前为虚拟机分配内存,并为intal_create的返回指针在堆中分配内存。这两个修复解决了这个问题。请看下面的代码以供参考。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    void* intal_create(const char* );
    void* intal_increment(void* );

    void *intal_create(const char* str)
    {
        int *a = (int *)malloc(sizeof(int));
        *a = atoi(str);
        return a;
    }

    void *intal_increment(void *intal)
    {
        //Here i am not allocating
        int *a = (int *)intal;//new pointer;
        (*a)++;
        return intal;
    }

int main()
{
    int * x;// void * return a pointer, need a pointert to int to pick it up
    char dummy[20] = {0};
    fgets(dummy,5,stdin);
    x = (int *)intal_create(dummy);
    printf("integer return is %d\n",*x);
    printf("address stored is %p\n",(void*)x);
    x=(int *)intal_increment(x);
    printf("integer return is %d\n",*x);
    printf("address stored is %p\n",(void *)x);
    //Make sure you deallocate the memory allocated in the intal_create function.
    free(x);
}