-3

有人可以告诉我我在这里做错了什么:

#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
4

3 回答 3

1

问题如下: -

*aaa = 10;

aaa是一个指针,你只能在分配内存后执行上述操作aaa

aaa = malloc(sizeof(int)) ;
于 2013-10-24T16:27:45.350 回答
1
int *aaa;
*aaa = 10;

您已经定义了一个指向整数的指针,但是您还没有定义任何aaa可以指向的整数。此时aaa包含一些垃圾地址,因此当您*aaa = 10尝试在该垃圾位置写入时。结果,您遇到了分段错误。

要解决此问题,您需要定义一个整数,如下所示:

int aaaValue;
int *aaa = &aaaValue;
*aaa = 10;
于 2013-10-24T16:28:28.953 回答
1

整数 *aaa; 未初始化,即 aaa 指向某个垃圾地址(可能超出您的程序段),您正在修改此加法器 *aaa = 10;

您不需要转发 ddeclaration 来编译此代码吗?

于 2013-10-24T16:29:42.687 回答