有人能告诉我这里做错了什么:
#include <stdio.h>
#include <string.h>
main()
{
int a = 3;
int aa = 2;
int *aaa;
*aaa = 10;
func(&a, &aa, aaa);
printf("%d\n",a);
printf("%d\n", *aaa);
}
void func(int *b, int *bb, int *bbb){
*b = *bb;
//int c = *bbb;
printf("%d---\n",*b);
//printf("%d c value \n",bbb);
}
我在运行时遇到分段错误
gcc编译器gcc(GCC)4.1.2,关于linux
这是错误:
>>gcc file.c -o file
file.c:14: warning: conflicting types for ‘func’
file.c:10: warning: previous implicit declaration of ‘func’ was here
>>./file
Segmentation fault
答案 0 :(得分:1)
问题如下: -
*aaa = 10;
aaa
是一个指针,只有在将内存分配给aaa
之后才能执行上述操作:
aaa = malloc(sizeof(int)) ;
答案 1 :(得分:1)
int *aaa;
*aaa = 10;
您已经定义了一个指向整数的指针,但是您没有定义aaa
可以指向的任何整数。此时aaa
包含一些垃圾地址,因此当您执行*aaa = 10
时,您正试图在该垃圾位置写入。结果你得到了分段错误。
要解决这个问题,你需要定义一个这样的整数:
int aaaValue;
int *aaa = &aaaValue;
*aaa = 10;
答案 2 :(得分:1)
int * aaa;未初始化,即aaa指向某个垃圾地址(可能超出您的程序段)并且您正在修改此加法器* aaa = 10;
您是否需要转发ddeclaration来编译此代码?