Tag: visual studio 2010

在__device / global__ CUDA内核中动态分配内存

根据CUDA编程指南 ,第122页,只要我们使用计算体系结构2.x,就可以在设备/全局函数内动态分配内存。 我的问题是,当我尝试这个时,我得到命令行消息: 命令“some command”-gencode = arch = compute_10,code = \“sm_10,compute_10 \”-gencode = arch = compute_20,code = \“sm_20,compute_20 \”等…… 接下来是一个错误,表示您无法从设备/全局函数调用主机函数(malloc)。 上面的消息显示它正在尝试在compute 1.x下编译。 我正在使用VS2010并在“CUDA C / C ++”属性页中将“代码生成”设置为“compute_20,sm_20”,因此我不确定为什么它仍在尝试在compute 1.x下编译。 我肯定使用支持2.x的卡。 有任何想法吗?

为什么这段代码不能编译?

任何人都可以解释为什么这个代码编译: #include #include int main (int argc, char *argv []) { FILE *ptr; char string[10] = “Testing”; ptr = fopen(“C:\\Users\\Jordan\\Desktop\\Hello.txt”, “wb”); fwrite(string,sizeof(string[0]), sizeof(string)/sizeof(string[0]), ptr); } 然而,这不是:给出错误C2065:’string’:未声明的标识符 #include #include int main (int argc, char *argv []) { FILE *ptr; ptr = fopen(“C:\\Users\\Jordan\\Desktop\\Hello.txt”, “wb”); char string[10] = “Testing”; fwrite(string,sizeof(string[0]), sizeof(string)/sizeof(string[0]), ptr); } 我在Windows 7计算机上使用Visual Studio 2010。 谢谢

64位随机发生器的种子

我目前正在运行一个带有8个以上管道(线程)的multithreading仿真应用程序。 这些管道运行非常复杂的代码,该代码依赖于种子生成的随机序列。 然后将序列归结为单个0/1。 在将种子从主线程传递到处理管道之后,我希望这种“随机处理”是100%确定性的。 所以,我可以在第二次运行中复制结果。 所以,例如:(我有这个编码,它的工作原理) Pipe 1 -> Seed: 123 -> Result: 0 Pipe 2 -> Seed: 123 -> Result: 0 Pipe 3 -> Seed: 589 -> Result: 1 当我需要运行100M或更多这些过程然后平均结果时,就会出现问题。 可能只有100M中的1个是1,其余的都是0.很明显,我不能用32bit种子为srand() 100M随机值。 是否可以使用VS2010中的64位种子播种srand(),或使用等效方法? rand()在2 ^ 32之后重复自身还是没有(有一些内部隐藏状态)? 谢谢

CreateFile始终覆盖指定的文件

我正在尝试记录我使用Windows-API和C语言编写的服务所做的操作,因此我创建了一个日志文件系统。 问题是,在每次CreateFile调用时,都会覆盖该文件,而不是只打开它并在文件末尾写入。 这是我的WriteInLogfile函数的代码: void WriteInLogFile(LPCTSTR log_string) { HANDLE hFile; DWORD dBytesWritten; if ((hFile = CreateFile(LOG_FILE_PATH, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE && (GetLastError() == ERROR_FILE_NOT_FOUND)) { if ((hFile = CreateFile(LOG_FILE_PATH, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE) { if (!WriteFile(hFile, log_string, strlen(log_string), &dBytesWritten, NULL)) aff_error(“WriteInLogFile”); CloseHandle(hFile); } } else { if (!WriteFile(hFile, […]

为什么我得到“错误未声明的标识符”,除非我在开​​头声明我的变量?

我有以下时间: #include “stdafx.h” #include int main() { int val1,val2; printf(“Enter the first value”); scanf(“%d”,val1); scanf(“%d”,&val2); int c; c=val1 + val2; printf(” the value is : %d”, c); return 0; // 0 means no error } 我得到错误未声明的标识符c。 另外,语法错误。 失踪 ; 在类型之前。 但是,如果我更改以上错误消失。 请帮忙 #include “stdafx.h” #include int main() { int val1,val2,c; printf(“Enter the first value”); scanf(“%d”,&val1); […]

在VS2010中,abort()不是__declspec(noreturn)

在我的VS2010副本中,stdlib.h包含(第353-355行) _CRTIMP __declspec(noreturn) void __cdecl exit(_In_ int _Code); _CRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code); _CRTIMP void __cdecl abort(void); 我觉得奇怪的是abort()上没有noreturn注释。 有谁知道这个的原因? 这是一个错误吗? 编辑:在VS2008中,它是相同的,但是stdlib.h的第371-373行 缺少noreturn注释会触发错误C4716 。 进一步参考: 用于标准化noreturn注释的C ++ 0x提议 ,其中说abort应该携带它。 编辑:看起来像一堆讨论消失了,删除的答案,但它的要点包含在缺陷报告#048中 。

如何在Windows上将libxml2与zlib1链接?

我需要为我的TeamSpeak 3插件编译libxml2 32位和64位二进制文​​件,因为我找不到dll / lib 64位下载。 当我使用我编译的libxml2.dll作为命令提示符应用程序中的依赖项时,它工作得很好。 但是,当我尝试将其用作TeamSpeak 3中的依赖项时,程序会在启动时立即崩溃。 特别是它在这一行崩溃: https://github.com/NobleUplift/TeamSpeak3WebsitePreview/blob/master/ts3websitepreview/plugin.c#L148 这是我在Windows上编译libxml2的批处理脚本: @ECHO OFF CALL “C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat” CD libxml2-2.9.4\win32 nmake clean cscript configure.js compiler=msvc zlib=true prefix=D:\Repos\libxml2\release include=D:\Repos\libxml2\dll\include lib=D:\Repos\libxml2\dll\bin debug=yes nmake nmake install cd ../.. 左侧下载的libxml2.dll可以正常工作。 编译的libxml2.dll在右侧。 我已经尝试使用zlib标志,我将我的zlib标头放在include目录和lib目录中的dll / lib中,但我无法将其链接到DLL中。

fflush(stdin)无法在cygwin中使用gcc编译,但使用visual studio 2010进行编译

我(重新)学习编程,我从C开始。我的IDE(如果我可以这么说)是Windows7上的cygwin(32Bit)和Visual-Studio 2010。 我一直在编译用gcc(cygwin)和VS2010编译器编写的代码。 我想,我这样做是因为我认为这是一种很好的学习方式。 无论如何,我刚刚了解了fflush(stdin),即刷新stdin缓冲区。 似乎是一个很好的function,因为使用scanf似乎很痛苦。 所以我根据我的教科书中的一个例子编写了下面的代码。 它在cygwin和VS2010中都使用gcc进行编译。 当我运行VS编译的程序时它工作正常(s.below),当我在cygwin中运行gcc编译的程序时,fflush(stdin)不会刷新stdin缓冲区(s.below)。 我已经读过一些关于fflush(stdin)的线程,在某些情况下有一个未定义的行为。 无论这意味着什么,我都是从C for Linux Programming教科书中获取的。 如果fflush(stdin)不是一个有效的方法来摆脱stdin缓冲区中的东西,还有什么其他标准方法? 非常感谢任何答案! ==在Windows下运行的程序: enter a long integer and a double 23.00 78.99 lint = 23 dt = 0.00 enter a five digits input 78493 u entered 78 and 493 ==程序在Cygwin中运行: enter a long integer and a double 23.00 78.99 lint = […]

如何使用visual studio 2010编写静态ansi-c库

当我在VS2010中编写和编译lib文件时,我遗漏了一些东西。 我不知何故没有正确标记出口。 控制台命令dumpbin.exe -headers mylib.lib > stackoverflow.txt生成以下输出。 (我删除了空行) Microsoft (R) COFF/PE Dumper Version 10.00.30319.01 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file mylib.lib File Type: LIBRARY ANON OBJECT HEADER VALUES 1 version 14C machine (x86) 515AC7B8 time date stamp Tue Apr 02 13:57:44 2013 ClassID: {0CB3FE38-D9A5-4DAB-AC9B-D6B6222653C2} 171A size 0 flags 我创建了一个新的空项目。 新项目是一个空的静态库项目,没有预编译的头文件。 我把它命名为mylib。 […]

使用_CrtDumpMemoryLeaks将数据显示到控制台

我正在使用_CrtDumpMemoryLeaks函数,它工作正常但在文档中承诺不仅要返回true或false,还要打印一些信息。 我试过用: _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG ); 但是这里的一些代码没有出现在屏幕上。 #define _CRTDBG_MAP_ALLOC #include #include #include #include int main() { slist* students = 0; clist* courses = 0; char c; char buf[100]; int id, num; malloc(100); _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG ); printf(“there is memmory leaks?: %d\n”,_CrtDumpMemoryLeaks()); system(“pause”); return 0; } 输出没有关于内存泄漏的数据..为什么会这样? 顺便说一下输出 有memory leaks?:1按任意键继续。 。 。