以下代码不会抛出异常并打印"成功".为什么?
#include <iostream>
int main()
{
size_t size = size_t(1024)*1024*1024*1024*1024*1024*1024*1024;
char* data = new char[size];
if (data == NULL)
std::cout << "fail" << std::endl;
else
std::cout << "success" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果这是它的工作方式,我如何检查我有足够的内存?
[ 编辑:让我的愚蠢代码更正确,现在如果我删除两个,它至少会在x64上失败*1024
]
当我运行以下代码时:
#include <stdio.h>
int main(int argc, char *argv[])
{
int p = 0;
p = strcmp(NULL,"foo");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到分段错误.回声$?139.但是当我跑的时候
#include <stdio.h>
int main(int argc, char *argv[])
{
int p = 0;
strcmp(NULL,"foo"); // Note removed assignment
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我没有任何分段错误.有人可以请一些光吗?
这是我的gcc信息:
> gcc --version
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-8)
Run Code Online (Sandbox Code Playgroud) 有时需要将字符串的长度与常量进行比较.
例如:
if ( line.length() > 2 )
{
// Do something...
}
Run Code Online (Sandbox Code Playgroud)
但我试图避免在代码中使用"魔术"常量.
通常我使用这样的代码:
if ( line.length() > strlen("[]") )
{
// Do something...
}
Run Code Online (Sandbox Code Playgroud)
由于函数调用,它更具可读性,但效率更高.
我写了模板函数如下:
template<size_t N>
size_t _lenof(const char (&)[N])
{
return N - 1;
}
template<size_t N>
size_t _lenof(const wchar_t (&)[N])
{
return N - 1;
}
// Using:
if ( line.length() > _lenof("[]") )
{
// Do something...
}
Run Code Online (Sandbox Code Playgroud)
在发布版本(VisualStudio 2008)中,它生成了非常好的代码:
cmp dword ptr [esp+27Ch],2
jbe 011D7FA5
Run Code Online (Sandbox Code Playgroud)
好的是编译器在二进制输出中不包含"[]"字符串.
它是特定于编译器的优化还是常见行为?
说我有列Gender
和约束CHECK( Gender IN ('F', 'M', 'OTHER'))
.
如果我不小心忘记在客户端处理这个问题,用户会看到smth
ORA-02290: check constraint (SYS_C099871244) violated
对于用户来说也不是很有帮助,对于维护或调试的开发人员也是如此
有没有办法提供开发人员定义的消息,如(伪)Java
assert Gender IN (0,1):'Gender must be F or M'
我能想到的唯一方法是将约束移动到BEFORE UPDATE或INSERT触发器以及失败时Raise_Application_Error( code, my_message )
.但我不喜欢它
编辑
具体原因的列表,如评论中所述
1.我真的希望保持逻辑尽可能接近数据
2.对于最终用户,Raise_Application_Error消息与应用程序消息
3 无法区分.即使访问数据绕过,开发人员也会看到好消息应用程序
4.将约束移动到触发器是丑陋的(是吗?),所以我必须找到与Raise_Application_Error不同的smth
EDITA2 1.5 年后,在我离开与db相关的工作之后,它终于发生在我身上,我真的不喜欢这个 - 代码重复.我必须在服务器和客户端重复完全相同的逻辑.最有可能的是,有两种不同的语言.并保持同步.这只是丑陋的.
虽然答案清楚地表明,但我无能为力.所以现在是我成为好公民并最终接受答案的时候了(对不起,只是忘记了这一点).
在10年甚至5年内,将没有[ Edit2:服务器或桌面] 32位CPU.
那么,使用int
(32位)long
(64位)有什么优势吗?
使用中有什么缺点int
吗?
编辑:
通过10 or 5 years
我的意思是在绝大多数地方,这些LANGS使用
我的意思是默认使用哪种类型.这一天,我甚至都不愿意考虑是否应该使用short
循环计数器for(int i...
.long
计数器已经赢了同样的方式
寄存器已经是64位,32位类型已经没有增益.我认为8位类型有一些损失(你必须使用更多位然后你正在使用)
我想在当前行的特定单元格的右下角显示弹出按钮或花哨的消息(带有彩色背景等).
现在我只想知道如何获取网格坐标:
x = DBGrid.DataSource.DataSet.RecNo
y = DBGrid.Columns [index]
还有TCustomGrid.CellRect,它会做我想要的,但它受到保护,我不想继承和创建另一个组件类.
我能想到的一个疯狂的解决方法是将onDrawColumnCell事件中的TRect-s保存到某个数组中.
所以你怎么看 ?
编辑
如何获取当前行中第二个单元格的屏幕坐标?
如果我尝试使用它,我会NullPointerException
.如果移出构造函数,它可以正常工作.所以,我很好奇发生了什么.
这是代码:
package com.example.nullptrservice;
import android.app.Service;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service {
public MyService() {
super();
PackageManager pm = this.getPackageManager();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
Log.i("MyService", "---------- started --------");
return Service.START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) { return null; }
}
Run Code Online (Sandbox Code Playgroud)
当我手动运行服务时,这是logcat输出:
D/AndroidRuntime( 4174): D/AndroidRuntime( 4174): AndroidRuntime START com.android.internal.os.RuntimeInit D/AndroidRuntime( 4174): CheckJNI is OFF D/AndroidRuntime( 4174): Calling main entry com.android.commands.am.Am D/dalvikvm( 4184): Late-enabling CheckJNI …
我正在尝试使用 chrono.txt 查找 UTC 格式的系统时间。我认为下面的程序只给我当地时间,请有人帮帮我吗?
#include <iostream>
#include <chrono>
#include <ctime>
auto GetSystemTime() -> uint8_t * {
auto now = std::chrono::system_clock::now();
std::time_t currentTime = std::chrono::system_clock::to_time_t(now);
return reinterpret_cast<uint8_t *>(std::ctime(¤tTime));
}
int main()
{
std::cout << GetSystemTime();
}
Run Code Online (Sandbox Code Playgroud) 这次我想从头到尾打印一个数组.
这就是我写的:
public class Arrays {
public static void main (String[] args){
for (int i = args.length; i >=0; i--){
System.out.print(args[i]+" ");
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误消息:线程"main"中的异常java.lang.ArrayIndexOutOfBoundsException:4在Assignment02Q04.main(Assignment02Q04.java:5).
仍然很难实现Eclipse错误通知.我很乐意提供帮助.
我有一张地图:
Map<String, Map<Integer, List<Integer>>>
e.g. Map<Name, Map<Id, List<ReferenceId>>>
Outcome:
List<Id>
List<ReferenceId>
Run Code Online (Sandbox Code Playgroud)
我想将这个地图转换成两个整数列表.一个列表包含内部映射键,另一个列表包含内部映射值(即List<Integer>
)
任何人都可以告诉我如何使用流在Java 8中执行此操作?
我试过这种方式但得到了Cast Exception,无法将String转换为Integer.
map.values().stream()
.map(m -> m.entrySet()
.stream()
.map(e -> e.getKey())
.collect(Collectors.toList()))
.flatMap(l -> l.stream())
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud) 以下最小代码示例在 x64 调试模式下编译并在 Visual Studio 2013 调试器中运行,生成
未处理的异常位于...:访问冲突写入位置 0xFEEEFEEE。
调试时,我发现访问冲突发生在“return 0;”处 陈述。
(当在没有调试器的情况下从控制台运行时,错误显示“0x 处的指令...引用了 0xddddddd 处的内存...无法写入内存。”)。
#include <atomic>
#include <string>
int main()
{
std::atomic<std::string> a1("127.0.0.1:41001");
std::string ep1_1 = a1.load();
std::string ep1_2 = a1.load();
return 0;
}
Run Code Online (Sandbox Code Playgroud)