int * vs char *初始化

拉姆齐C.

看一下下面的C代码。

char * str1 = "hello";

它创建一个分配给只读存储器的char数组,而str1作为第一个元素的指针进行分配。由于是只读的,因此无法在没有分段错误的情况下更改内存。在此语句中:

int * p = 1;

p现在将分配为1,并且实际上可以将其重新分配给其他值,而不会发生分段错误。为什么是这样?在字符串文字的情况下,仅使内存只读的只是编译器的决定吗?

巴拉克的手

int * p = 1;

p 现在分配为1。

错误的。p现在指向内存地址1。

从您没有正确分配从该地址开始的任何内存块开始,这可能会导致各种问题。

更糟糕的是,即使您设法以某种方式在地址1处分配了一个内存块,由于该地址未与之对齐int(即1不能被整除sizeof int),因此您的代码也容易发生未对齐的加载/存储操作。

如果您的平台(即指定的编译器+基础HW体系结构)不支持这些操作,则任何通过读取或写入的尝试p都可能导致:

  • 良好情况下的总线(aka分段)故障
  • 糟糕情况下的不确定结果

前者要好于后者,因为在发生总线故障时,至少您会立即意识到问题,而在结果未定的情况下,在程序执行的稍后某个时刻可能会出现一些意想不到的行为,从而使您陷入困境。调试会议之神的怜悯。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

初始化char * vs int *

来自分类Dev

C ++:初始化“ int Agent :: tun_alloc(char *,int)”的参数1 [-fpermissive]

来自分类Dev

递增'int i = 0'以递增初始化的char数组的位置

来自分类Dev

C ++在模板函数中初始化大小为“ static * int”的char数组

来自分类Dev

用001 vs 1初始化int有区别吗?

来自分类Dev

byte vs char vs int类型

来自分类Dev

从MutableList <Int>初始化Array <Int>

来自分类Dev

在C中初始化char数组

来自分类Dev

无法初始化char数组

来自分类Dev

初始化和导航char [] []

来自分类Dev

在C ++中初始化char **

来自分类Dev

如何初始化struct char数组?

来自分类Dev

Eager 初始化 vs Lazy 初始化用例

来自分类Dev

long long int初始化警告

来自分类Dev

在C中初始化int指针

来自分类Dev

如何初始化int * const * const?

来自分类Dev

如何检查是否INT初始化?

来自分类Dev

如何初始化“ int a [100] = {1}”

来自分类Dev

int变量初始化功能失败

来自分类Dev

不同的int初始化方式

来自分类Dev

C ++ Vector <int>数组初始化

来自分类Dev

使用memset初始化int数组

来自分类Dev

Swift vs ObjC初始化过程?

来自分类Dev

{} vs.()类成员的初始化

来自分类Dev

defaultdict vs dict元素初始化

来自分类Dev

VS初始化灵活数组C ++

来自分类Dev

char Vs的指针数组int的指针数组

来自分类Dev

如何使用字符串(字符数组)但不使用整数数组的int指针初始化char指针?

来自分类Dev

初始化块vs构造函数vs变量初始化