scanf并指向int *分段错误

时间:2011-11-18 20:37:21

标签: c pointers segmentation-fault scanf

我调用我的程序,它是从标准输入中读取一堆整数

int main() {
    int* s;
    derp(s);
    return 0;
}

void derp(int *size) {
    scanf("%d", size);
}

为什么此代码会导致分段错误?

3 个答案:

答案 0 :(得分:9)

int* s;
derp(s);

s指向什么?随机垃圾内存,因为它没有初始化。你应该这样做:

int s;
derp(&s);

或者您可以使用malloc分配存储空间:

int* s = malloc( sizeof(int) );
derp(s);
free(s);

答案 1 :(得分:3)

因为你需要初始化s。

添加:

s = malloc(sizeof(int));

完成后请记得free(s)

答案 2 :(得分:0)

需要使用malloc()初始化

。就像现在一样,s指向内存中的某些随机垃圾。