我的编码分配与它的头文件一起出现,这意味着我们需要使用相同的数据类型,并且没有任何不同。 有很多指针,(主要是很多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地址仅供我理解。
分段错误永远不会结束,据我了解,我只是返回一个指针,并要求一个指针停止返回指针
答案 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);
}