sizeof(指针)
即可,如果是想测量指针指向的内存空间的大小的话,那就不行了。
2. c语言中指针访问内存问题
在定义一个指针时如果还不确定让它指向何处,就先给指针赋一个空值
例如int
*p=NULL;
这样不会使你定义的指针称为野指针,而且你在检查的时候会一眼就看到这个指针的初始状态,可以很容易知道现在该如何对其操作
3. 检查是否有数组越界,指针异常,访问到不应该访问的内存区域,哪里出问题了
setdata函数中要先给n赋值才能使用,把n的赋值挪到图中这个位置即可。功能上没细看,有问题可以追问。
4. 编c语言时,为什么指针悬空后,系统会崩溃
指针悬空后,如果一直被弃置不用除了一些内存被无缘无故的被占用外,
不会有其他不好的影响。
但是一旦一个指向未知的指针被程序调用,并且进行了写操作,这就有危险了。
如果这个指针指向了系统核心进程那么这个进程有可能引意外的写操作而异常进而导致系统崩溃,更可怕的是,如果这个指针如果指向了硬件驱动,如打印机、内存、CPU调度或温度控制。
那后果就是硬件的损毁。
5. 指针为什么是不安全的呢
指针不安全,因为程序员总会犯错的,只要你不犯错,指针就是安全的
6. 指针和内存泄露有什么关系
用指针不等于内存泄漏,但是如果指针用的不正确就可能出现内存泄漏,比如
int *p;
p = malloc();申请一些内存空间
但是最后没有free();那么就会出现内存泄漏,这样的内存是很危险的,也是不允许出现的。
7. 一个指针指向虚拟地址,用完此地址后使该指针指向NULL是否会造成内存泄露
看你是否已把指针指向的内存释放,否则丢失指针会导致后面无法释放内存。物理与虚拟内存均可能泄露,malloc函数是调用API HeapAlloc从堆中申请内存的,所以只要把堆(应该是默认堆,自动释放)释放了,物理内存就不会泄露,只在使用堆时虚拟内存泄露而已,但强烈建议在释放内存之前不要丢掉指针,在使用完用户自建堆后记得释放堆(使用FreeAlloc)。
8. Segmentation fault:段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存
如果输入n大于100,就会出错。数组a会溢出
9. poj提示Segmentation fault:段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存区域
1:一般都是非法内存操作,例如数组越界,例如申请a[5],却访问到a[5]或者a[6],这也会有很多情况,可能是循环操作时循环变量控制有问题,可能是字符串拷贝时长度发生溢出;
2:指针指向了非法内存,例如申明一个指针,但是没有对指针进行初始化,直接就引用,或者引用里面的元素或者函数,或者没有分配内存就进行释放等,另外,申请内存还要检查是否申请成功,如果没有申请成功也会出现这种情况;
3:单步调试或者加打印信息,细心一点总可以找到错误的,注意编译成调试版本;
4:如果是linux,可以产生core文件,从core文件查看出错的地方。
10. C语言有关指针内存非法访问的问题,字典搜索程序如下
输出用
printf("%s",qq->d);
这里不要有*
加上* 传入的就是char类型了。