嗨,因为我正在学习 C 和 C++,所以在使用编码术语时我会犯很多错误,问题是:
为什么我无法打印 *p 的值? malloc 不会返回 NULL 指针;那么为什么它会出现段错误呢?
我读到空指针与未分配的指针不相等。
代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p = malloc(sizeof(int));
p= 100;
printf("Value of p is: %d \n",p);
printf("value of *p is: %d \n",*p);
printf("Value of &p is: %d \n",&p);
}
终端输出:
rtpl@rtpl-desktop:~/Desktop$ ./practice_output
Value of p is: 100
Segmentation fault (core dumped)
第二秒时终端输出 printf
语句被注释掉:
rtpl@rtpl-desktop:~/Desktop$ ./practice_output
Value of p is: 100
Value of &p is: -1514709824
此外,我很确定我的问题标题不正确:请告诉我应该将其更改为什么
最佳答案
首先检查 malloc
的返回值和*p=100
你想做的事。否则,您将更改指针的值。并且存在内存泄漏。
p
的值应打印 %p
。 printf("%p",p);
还有free
使用完后动态分配的内存。
int main()
{
int *p = malloc(sizeof(int));
if( p == NULL)
{
fprintf(stderr,"%s","Error in allocation");
exit(1);
}
*p= 100;
printf("Value of p is: %p \n",p);
printf("value of *p is: %d \n",*p);
printf("Value of &p is: %p \n",&p);
free(p);
}
--
此外,当您想将某些内容分配给指针变量时,您必须将其转换为正确的类型。
int *p;
p = (int*)0x12f3ff;
访问某些内存不足的地址或使用错误的格式说明符会导致未定义的行为。
关于c - 无法打印动态分配的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47216434/