#include <stdio.h> #include <stdlib.h> int main() { int count = 10; int *ipcou = 0; *ipcou = count; printf("%d\n", *ipcou); return 0; }
再简单不过的C程序,出现段错误,一般多错误是内存溢出。可以肯定是 *ipcou = count; 这一句出现了问题。但是可以肯定的是数组或malloc之后可以消除这个错误,难道GCC 在编译的时候是不给指针分配空间吗?
Linux编程经验很少,望大侠们指教。
这段代码里,ipcou自身是有分配空间的,其中的值为0(意味着*ipcou指向的是0)。
ipcou = count意味着从变量ipcou取出值(为0),以该值为赋值的目标地址,然后把count的值赋值到那里去。地址0所在的内存页是受保护的,向它写入就会引发segfault。
如果有int *ipcou = (int)malloc(...),则在malloc成功获取空间的时候,ipcou的值就会是有效的内存地址,后面的赋值自然就没问题。