#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int * p = malloc(sizeof(int));
*p = 10;
*p += 10;
printf("%d", *p);
}
如果它是malloc,那么它给出了正确的值,但如果我将其声明为:
则会出现总线错误int main(){
int * p;
*p = 10;
*p += 10;
printf("%d", *p);
}
答案 0 :(得分:4)
一个未初始化的指针就是这样;初始化。您认为它指向哪里?它的价值是不确定的,读/写它会导致不确定的行为。
它不必引用动态分配的内存(malloc
),但它必须引用有效的内存。例如,这没关系:
int main(void)
{
int x;
int *p = &x;
*p = 10;
*p += 10;
printf("%d", *p);
}
答案 1 :(得分:0)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *ptr;
//*ptr=123; Error here....Becuase it is like trying to store
//some thing into a variable without creating it first.
ptr=malloc(sizeof(int)); // what malloc does is create a integer variable for you
// at runtime and returns its address to ptr,
// Which is same as if you assingned &some_variable
// to ptr if it had been already present in your program.
return 0;
}