[转载]c语言指针segmentation fault 指针常常错误的小地方
http://www.cnblogs.com/qingjoin/archive/2012/03/20/2408944.html #include <stdio.h> #define JUDGE_POINT_TWO 1 int main()
{
#if JUDGE_POINT_TWO
char str[] = "qingjoin";
char *ptr = "c program";
char *point; point = str;
point[] = 'a';
point[] = 'x';
printf("str=%s\n",str); ptr[] = 'm'; //这个地方是错误的 printf("ptr=%s\n",ptr);
#endif
} 编译结果:
# gcc test_point.c -o test_point
# ./test_point
str=qiaxjoin
Segmentation fault //char str[] = "qingjoin"; str就数组变量,当地址赋给point后。point[2]就是str[2],它的内容是可以改变的 //char *ptr = "c program"; 它是先定义一个常量,"c program" 这个常量是定义在“栈”里面,然后将这个常量的地址赋给ptr,而不是*ptr。常量是不能被修改的 所以ptr[13] = 'm'; 就会出错
#include <stdio.h> #define JUDGE_ONE 1 int main ()
{
#if JUDGE_ONE
int i = ;
int num[] = {,,,}; int *p;
p = &i; /**************************************************
这样是正确的, 或int *p = &i 但 int *p=i这样的话就是错误的
如果是 *p = i 这样编译时是不会出现错误,但程序运行的时候会出现段错误
原因是没有给 p 分配内存它没有空间去存放i 的值
**************************************************/ char *str;
*str = "qingjoin"; // 这种写法是错误的。因为"qingjoin"是字符串,也是数组,在这里它是常量
str = "qingjoin" ; // 这种才是正确的 ,赋值的时候赋的是地址,它只能赋给指针变量str;
printf("%d\n",*p);
#endif
}
int w[];
int *pw=w ; // pw表示数组w ,或者说指向变量w[0]
int *q=&w[]; // q指向变量w[2]
int rr[][],(*pr)[]; /* pr是指向一维数组的指针,该一维数组 有5个元素,每个元素是一个整数 */
pr=rr; // pr指向一维数组rr[0],该rr[0]有5个元素
int *qr[]; /* qr是指针数组,有5个元素,每个元素是一个指向 int类型变量的指针 */
int *(tr[]); /* 同qr 。tr是指针数组,有5个元素,每个元素是 一个指向int类型变量的指针 */
qr[]=&y; // qr[1]指向变量 y
[转载]c语言指针segmentation fault 指针常常错误的小地方的更多相关文章
- Segmentation fault (core dumped) 错误的一种解决场景
错误类型 Segmentation fault (core dumped) 产生原因 Segmentation fault 段错误. Core Dump 核心转储(是操作系统在进程收到某些信号而终止运 ...
- C++中Segmentation fault(Core Dump)错误处理
什么是Core Dump? Core的意思是内存, Dump的意思是扔出来, 堆出来. 开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped ...
- conda pip 安装 dgl 并运行demo 出现:Segmentation fault (core dumped) 错误
安装dgl 并运行的时候,出现了如上错误,很是郁闷:使用 gdb python; run train.py 进行调试,发现是torch的问题:我猜测估计是torch 安装的版本过于新:于是重新安装 1 ...
- 论Segmentation fault
刚开始学c的时候,最头疼的事情是编译总是通不过,郁闷的要死,只要编译通过了,就兴奋的要死.现在,最头疼的事情是什么呢,编译没问题,但是程序跑的时候会出现Segmentation fault! 这个东西 ...
- Linux下的段错误(Segmentation fault)
Linux下的段错误(Segmentation fault) 段错误是指:访问了系统分配给程序的内存空间之外起的内存空间,比如: 访问不存在的地址 访问受系统保护的地址 访问了只读内存地址 内存访问越 ...
- 内存分配与Segmentation fault
为了方便使用,我做了如下结构体的嵌套使用: struct operation{ int num; char name[100]; char owner[100]; char msg[100];}; s ...
- 结构体指针之 段错误 具体解释(segmentation fault)
一个网友问了我一个问题.一个C程序执行出现了段错误,这个问题非常好.非常多刚開始学习的人都easy犯这个错误,详细代码例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3 ...
- 【转载】C/C++语言void及void指针深层探索
C/C++语言void及void指针深层探索 1.概述许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述vo ...
- (转载)c语言指针学习
前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...
随机推荐
- mysql_commit() COMMIT ROLLBACK 提交 回滚 连接释放
MySQL :: MySQL 8.0 Reference Manual :: 28.7.7.6 mysql_commit() https://dev.mysql.com/doc/refman/8.0/ ...
- SchuledExecutorService 使用controller控制线程关闭
1:SchuledExecutorService 使用controller控制线程关闭 package com.li.controller; import org.springframework.s ...
- redhat 5的中文包安装
中文包文件名.在iso文件的/server/文件夹下fonts-chinese-3.02-9.6.el5.noarch.rpmfonts-ISO8859-2-75dpi-1.0-17.1.noarch ...
- (25)HttpClient session
session概述 session机制 session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息. 当程序需要为某个客户端的请求创建一个session ...
- ng-深度学习-课程笔记-3: Python和向量化(Week2)
1 向量化( Vectorization ) 在逻辑回归中,以计算z为例,$ z = w^{T}+b $,你可以用for循环来实现. 但是在python中z可以调用numpy的方法,直接一句$z = ...
- DB开发之oracle存储过程
1. 存储过程格式 /* Formatted on 2011/1/17 13:20:44 (QP5 v5.115.810.9015) */ CREATE OR REPLACE procedure pr ...
- 20145339顿珠达杰 《网络对抗技术》 逆向与Bof基础
目的 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用: 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行.却本不应该执行的代码部分首地址(这需要我们有一定 ...
- linux内核与分析 心得与体会
作业目录: (1)计算机是如何工作的:http://www.cnblogs.com/20135335hs/p/5213394.html (2)操作系统是如何工作的:http://www.cnblogs ...
- Ubuntu16.04下安装tensorflow(GPU加速)【转】
本文转载自:https://blog.csdn.net/qq_30520759/article/details/78947034 版权声明:本文为博主原创文章,未经博主允许不得转载. https:// ...
- java bitmap/bitvector的分析和应用
转自: http://shmilyaw-hotmail-com.iteye.com/blog/1741608 简介 bitmap在很多海量数据处理的情况下会用到.一些典型的情况包括数据过滤, ...