我可以期望用户空间程序中的任何"数据"指针与地址0和0xffffffff ...保持安全距离,这样我可以安全地向指针添加一个小偏移而不检查溢出吗?当p是指向常量字符缓冲区或动态分配字符串的char指针(在现代> = 32位操作系统上)时,我可以安全地假设p + n不会溢出的最大正n是多少?
为了避免混淆:我在谈论溢出检查,而不是边界检查.例如:如果你有一个带有m个字符的字符串开头的指针p,并且你想要访问正偏移量i的字符,那么你需要检查i <m或者你可以间接检查p + i < p + m.但是,在后一种情况下,您还必须确保p + i不会溢出,即您必须确保p + i> = p.
更新:好的,如果i> m,p + i无效标准C,无论p + i是否实际被解除引用或是否溢出.然而,我真正感兴趣的问题是,是否存在一个小的n,p + n 在实践中不会溢出.回答这个问题显然需要一些关于现代操作系统如何组织地址空间的知识.
Update2:听说任何一个特定的平台已经非常有趣了,即使它不具有推广性.优选地,不是一些模糊的嵌入式嵌入式.x86或基于Power的32位Win,Linux和Mac将是最有趣的.
众所周知,大的本地/全局变量可能导致堆栈溢出.我知道在内存中使用指针和分配空间有助于克服这个问题.但这是唯一的选择吗?如果我在全球范围内拥有(或需要)太多指针,会发生什么?
关于堆栈空间:全局struct-type变量是否在堆栈中占用空间,或者像指针一样?我是否需要创建结构变量类型的指针以减少堆栈负载?
以下代码是否也将内存分配给名为的char**变量BIG?
// in the header file
typedef struct myStruct {
BIG[256][256];
int baz;
} myStruct;
// in the c file
myStruct* foo;
foo = (myStruct*) malloc( sizeof(*foo) );
如何轻松转换返回值malloc()?问题#3我写道:
foo = (myStruct*) malloc( sizeof(*foo) );
但我更喜欢写一些类似的东西:
foo = (foo) malloc( sizeof(*foo) ); // the compiler reports an error
这将减轻编辑代码时的痛苦(更改类型时foo).
英语不是我的母语,对于任何不清楚都很抱歉.
我有一个div.这很简单.这是下面的CSS代码.
#example {
background: #dcdcdc;
background-position: center;
postition: relative;
width: 980px;
text-align: center;
margin: 0px auto;
padding: 1px;
min-height: 30px;
}
Run Code Online (Sandbox Code Playgroud)
HTML代码:
<div id="example">testtesttesttesttesttesttesttesttesttesttesttest</div>
Run Code Online (Sandbox Code Playgroud)
如您所见,它只包含从数据库表中选择的文本.问题是,当文本的长度比屏幕宽时,它不会开始换行,它会过去.我想让它开始一个新的路线.我怎么能这样做?
注意:溢出隐藏在页面上.我只在Chrome 13和FF 3.6中测试了这个页面.
我有一个与Iframes/Youtube视频和Chrome相关的BUG ...
得到了一个div
<div id="single">
<div id="poza-mare">
<div class="items">
<div><iframe width="710" scrolling="no" height="360" frameborder="0" src="http://www.youtube.com/embed/CblqeBA0iIk" type="text/html"></iframe></div>
<div>...</div>
<div>...</div>
</div>
</div>
</div>
#poza-mare{position:relative;overflow:hidden;clear:both;height:360px;}
#poza-mare div {float:left;display:block;width:710px;}
#poza-mare .items {width:20000em;clear:both;margin:0;padding:0;position: absolute;}
#single{width:710px; overflow:hidden; margin:0 auto;z-index:2;}
Run Code Online (Sandbox Code Playgroud)
无论如何,项目类中的div是由Scrollable jQuery动画制作的,当iframe向左滚动时,iframe根本不想被隐藏(当其他一切被隐藏时,它只是保持可见).这只发生在Chrome中,在Firefox/Safari/IE9/Opera中完美运行.
我能做些什么才能让它发挥作用?:(
链接:http://lesateliersnomad.com/showcase/2d-animation/artmania-festival-2010/
提前致谢!
我需要在vb.net中对加密原因进行一些大的乘法运算,并将变量溢出为C,C++和C#.我已经在vb.net项目中禁用了溢出检查,但是当我做这些乘法时,我得到的结果是1.#INF
恩.在c:
z^y= 0xFFFFFFFF ^ 0x000003FC= 0xFFFFFC03
Run Code Online (Sandbox Code Playgroud)
在vb.net中:
z^y= 0xFFFFFFFF ^ 0x000003FC= 1.#INF
Run Code Online (Sandbox Code Playgroud)
是可以做到的吗?
据我所知,这不是由无限递归引起的.
该程序使用较小的数组(它是一个音频编辑器)正常运行.现在我增加了功能以允许更大的阵列(最多5分钟的音频,26460000个16位数据~50mb).
由于增加了数组的大小,我在一个特定的函数上收到堆栈溢出错误,它应该通过向后将数组写入新数组来反转输入文件的回放,然后覆盖原始数组.我猜测每个阵列可能高达50MB,这可能是问题所在:
//initialise temporary new array to place samples in
short signed int reverse_data[max_number_samples];
for (i=0; i<track_samples; i++)
{ //puts data from sound_data into reverse_data backwards.
reverse_data[(max_number_samples-1)-i]=sound_data[i];
}
for (i=0; i<track_samples; i++)
{ //now overwrites sound_data with the data in reverse_data
sound_data[i]=reverse_data[i];
}
Run Code Online (Sandbox Code Playgroud)
我对C++和编程很新,并且不确定我在调试期间得到的错误是什么告诉我的.
任何帮助将不胜感激,我确信有一个简单的解决方案(我读过涉及'堆'的东西,但我不确定'堆'真的是什么).
我在菜单栏上有3个菜单图标,但每次只显示2个图标,最后一个图标无处可寻.我的问题是:1.有足够的空间容纳3个图标,为什么只显示2个图标?2.如果系统认为第3个图标的空间不够,为什么不将第2个和第3个图标组合成溢出菜单?
下面是我的menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/refresh"
android:icon="@drawable/ic_menu_refresh"
android:showAsAction="ifRoom" />
<item android:id="@+id/add_homework"
android:icon="@android:drawable/ic_menu_edit"
android:showAsAction="ifRoom" />
<item android:id="@+id/set_groupid"
android:icon="@android:drawable/ic_menu_preferences"
android:showAsAction="ifRoom" />
</menu>
Run Code Online (Sandbox Code Playgroud)
这个片段在我的MainActivity中
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud) 我真的对此感到困惑.我正在划分两个正数并得到一个负面结果(我正在使用Java).
long hour = 92233720368L / (3600 * 1000000 );
Run Code Online (Sandbox Code Playgroud)
我得到结果-132.
但如果我将它们分成两个长数字,我得到了正确的结果:
long hour1 = 92233720368L / (3600000000L );
Run Code Online (Sandbox Code Playgroud)
然后我得到结果:25
我想知道它为什么会发生......
先感谢您!:)
我不确定是否double有一个标准化的表示,这就是我想问的原因,是否有一种很好的方法来编写一个assert确保a中的值double足够小以适应一个int64_t?
更具体地说int64_t,a和a 之间的比较double可能超出了前者的范围,并且保证是正确的?
#include <stdio.h>
int main()
{ char i=0;
for(;i>=0;i++);
printf("%d",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序的输出为-128.据我所知,字符变量将溢出,所有位将为0.并且取两个补码将再次为0.有人可以解释这个过程吗?
编辑:只是为了澄清这不是我的计划.这是竞争性考试中的编程问题.