这是我的第一个问题:)
我有一个桩文件,我打开它如下图所示;
ifstream in ( filename, ios :: binary | ios :: in )
Run Code Online (Sandbox Code Playgroud)
然后,我希望在unsigned int hold中保存2字节数据;
unsigned int hold;
in . read(static_cast<char *>(&hold), 2);
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎是正确的.但是,当我用它编译它时
g++ -ansi -pedantic-errors -Werror - -Wall -o main main.cpp
Run Code Online (Sandbox Code Playgroud)
编译器发出错误
error: invalid static_cast from type ‘unsigned int*’ to type ‘char*’
Run Code Online (Sandbox Code Playgroud)
实际上,我通过使用(char*)更改static_cast来解决这个问题
unsigned int hold;
in . read((char*)(&hold), 2);
Run Code Online (Sandbox Code Playgroud)
我的问题是:
static_cast<char*>和之间的区别是什么(char*)?(char*)是否更安全.如果您有足够的知识,可以告诉我有关该主题的信息吗?注意:如果您有更好的想法,请帮助我,以便我可以改进我的问题?
我开始学习使用JavaScript和HTML5的画布.
我试图用不同的模式绘制几个元素,但我总是得到最后一个设置的模式.我尝试使用save()和restore()方法存储堆栈统计信息,但我肯定在某个地方犯了错误,有人可以帮助我吗?
window.onload = function(){
draw(100, 100, "http://www.itexto.net/devkico/wp-content/uploads/2011/03/stackoverflow-logo-250.png");
draw(0, 0, "http://googlediscovery.com/wp-content/uploads/google-home.png");
};
function draw(x, y, src) {
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
context.save();
var imageObj = new Image();
imageObj.onload = function(){
var pattern = context.createPattern(imageObj, "repeat");
context.rect(x, y, 100, 100);
context.fillStyle = pattern;
context.fill();
};
imageObj.src = src;
context.restore();
}
Run Code Online (Sandbox Code Playgroud) 我希望my_custom_print()输出出现在控制台上.但是,如果该计划的stderror或者stdout是从重定向shell,他们应该被重定向(正常),但是从输出my_custom_print()应该被忽略.
是否有可能写出my_custom_print()令人满意的上述条件?如果可能,怎么样?
我在源文件sql_parse.cc中写了一些代码MySql 5.5.7rc.我使用过vector,allocator等等,但编译器没有与标准模板库(STL)链接.任何人都可以建议我该怎么办?
这是错误消息:
libsql.a(sql_parse.cc.o): In function `std::vector<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > > >::push_back(std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)':
sql_parse.cc:(.text._ZNSt6vectorISsSaISsEE9push_backERKSs[std::vector<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > > >::push_back(std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)]+0x74): undefined reference to
`std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >
>::_M_insert_aux(__gnu_cxx::__normal_iterator<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >*, std::vector<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > > > >, std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud) 我都尝试- C和C++两者很好地工作.
我是函数指针的新手,这是一个简单的代码,让我感到惊讶:
#include <assert.h>
void sort( int* arr, const int N );
int main ()
{
int arr1[] = { 1, 5, 2, 6, 2 };
int arr2[] = { 1, 5, 2, 6, 2 };
void (*sort_ptr)( int*, const int) = sort;
sort_ptr( arr1, 5 );
(*sort_ptr)( arr2, 5 );
assert( arr1[0] == 1 && arr1[1] == 2 && arr1[2] == 2 &&
arr1[3] == 5 && arr1[4] == 6 );
assert( arr2[0] == 1 …Run Code Online (Sandbox Code Playgroud) valgrind 告诉我以下内容:
==13880== Warning: invalid file descriptor -1 in syscall close()
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法来调查此错误?我的意思是 - 例如显示堆栈跟踪?
这是一个巨大的项目,我不能手动检查每个close.另外,我猜这对于坏域描述符的每个sys调用都是一样的.
我这样运行:
valgrind --trace-children=yes --track-fds=yes --log-fd=2 --error-limit=no \
--leak-check=full --show-possibly-lost=yes --track-origins=yes \
--show-reachable=yes ./exe
Run Code Online (Sandbox Code Playgroud)
在exe与调试信息.
更大valgrind的输出是:
==13880== Conditional jump or move depends on uninitialised value(s)
==13880== at 0x5A4022F: ??? (in /lib/i686/cmov/libc-2.11.3.so)
==13880== by 0x5A57323: ??? (in /lib/i686/cmov/libc-2.11.3.so)
==13880== by 0x5A56EC2: ??? (in /lib/i686/cmov/libc-2.11.3.so)
==13880== by 0x5A5555B: localtime_r (in /lib/i686/cmov/libc-2.11.3.so)
==13880== by 0x754E983: ??? (in /usr/lib/libapr-1.so.0.4.2)
==13880== by 0x754EAC9: apr_time_exp_lt (in …Run Code Online (Sandbox Code Playgroud) 这曾经很好地工作(然后外星人必须攻击我的电脑):
#include <thread>
#include <iostream>
int main()
{
std::cout << std::this_thread::get_id() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在它打印thread::id of a non-executing thread.
ideone.com会打印一些ID,但有趣的是可能导致我的平台出现这种行为.
$ uname -a
Linux xxx 3.13.0-77-generic #121-Ubuntu SMP Wed Jan 20 10:50:42 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:嗯..当我添加
std::cout << pthread_self() << std::endl;
Run Code Online (Sandbox Code Playgroud)
两行都打印相同的ID,但是当我删除它时,结果仍然是相同的 - "非执行线程".
void random(int M,int a,int c,int *seq,int start,int size)
{
int i = start;
seq[0] = 1;
seq[i] = (a * seq[i - size] + c) % M;
i += size;
}
for(int iter = 0;iter < ceil((double)(n/size));iter++)
{
random(M,a,c,seq,1,1);
}
Run Code Online (Sandbox Code Playgroud)
循环编译-fopenmp并gcc给出"无效控制谓词"错误.怎么解决?
假设我有一个服务器应用程序 - 使用UNIX套接字通过TCP连接.
连接是异步的 - 换句话说,客户端和服务器的套接字是非阻塞的.
假设以下情况:在某些情况下,服务器可能决定将某些数据发送到连接的客户端并立即关闭连接:使用shutdownwith SHUT_RDWR.
所以,我的问题是 - 是否有保证,当客户端调用时recv,它会收到(由服务器发送)数据?
或者,要接收数据,recv必须在服务器之前调用shutdown?如果是这样,我应该做什么(或者,更确切地说,我该怎么做),以确保客户收到数据?