我正在测试一个名为clunk的小型声音库(http://sourceforge.net/projects/clunk/).我为visual studio 11构建了该库,并将其链接到我的visual studio项目中.当我尝试test.cpp时,我收到了msvcr110d.dll抛出的断言.
是否与我的运行时库设置有关:它是" 多线程调试DLL(/ MDd) "?在clunk的cmakelist.txt中,我添加了以下代码行:
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
Run Code Online (Sandbox Code Playgroud)
我仍然收到指针分配问题的消息.为什么?
我有一个小代码,它在堆上分配一些内存,然后在它使用后尝试释放它.我在内存映射中遇到此错误.
守则是::
void merge(int *arr, int start, int mid, int end)
{
int i = 0, j = 0, k = 0, tmp1 = 0, siz = 0;
int *pt = NULL;
j = start, k = mid+1, tmp1 = start;
siz = (end - start) + 1;
if ((pt = malloc(siz * sizeof(int))) == NULL) /* line 32 */
{
printf("\n ERROR Aloocating mem \n");
return;
}
while (j <= mid && k <= end)
{
if (arr[j] <= …Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序来读取大约30,000个文件中的单词,但是在第4092次迭代之后我再也无法读取新文件了.我甚至尝试在循环结束时包含一个free(filePointer),但在尝试打开4092nd文件后,我的文件指针仍为NULL.任何想法或建议将不胜感激.
int main(int argc, char *argv[]) {
hashTable *bigramHT = create_table(100000000);
hashTable *tokenHT = create_table(100000000);
int numTokens = 0;
/* file pointer */
FILE *fp = NULL;
/* directory pointer */
DIR *dirp = NULL;
/* pointer to directory struct */
struct dirent *entry = NULL;
/* check if directory exists and can be opened */
if((dirp = opendir(argv[1])) == NULL){
return 1;
}
/* allocate memory for the filename paths (using maximum possible length) */
char *path;
path = …Run Code Online (Sandbox Code Playgroud) 我在D中编写一个trie,我希望每个trie对象都有一个指向某些数据的指针,如果该节点是trie中的终端节点,则该指针具有非NULL值,否则为NULL.在创建trie之前,数据的类型是不确定的(在C中,这将使用a完成void *,但我计划用模板完成),这是为什么需要指向堆对象的原因之一.
这需要我最终在堆上创建我的数据,此时trie节点可以指向它.尝试,似乎new执行此任务,就像在C++中一样.但是由于某种原因,这会因字符串而失败.以下代码有效:
import std.stdio;
void main() {
string *a;
string b = "hello";
a = &b;
writefln("b = %s, a = %s, *a = %s", b, a, *a);
}
/* OUTPUT:
b = hello, a = 7FFF5C60D8B0, *a = hello
*/
Run Code Online (Sandbox Code Playgroud)
但是,这失败了:
import std.stdio;
void main() {
string *a;
a = new string();
writefln("a = %s, *a = %s", a, *a);
}
/* COMPILER FAILS WITH:
test.d(5): Error: new can only create structs, dynamic arrays …Run Code Online (Sandbox Code Playgroud) 我主要使用高级编程语言,但昨天有朋友让我帮他解决一个简单的C++练习,当我正在研究它时,我编写了这段代码:
for (int x = 0; x < 10; x++){
int a, b, c;
a = x;
b = x*2;
c = x+5;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:这是否会导致内存泄漏,使a,b,c始终在内存的不同位置创建,或者它们是否总是被每个循环覆盖?
在编写一个程序来反转一个字符串后,我无法理解为什么在尝试反转字符串时出现了seg故障.我在下面列出了我的程序.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse(char *);
int main() {
char *str = calloc(1,'\0');
strcpy(str,"mystring0123456789");
reverse(str);
printf("Reverse String is: %s\n",str);
return 0;
}
void reverse(char *string) {
char ch, *start, *end;
int c=0;
int length = strlen(string);
start = string;
end = string;
while (c < length-1){
end++;
c++;
}
c=0;
while(c < length/2){
ch = *end;
*end = *start;
*start = ch;
start++;
end--;
c++;
}
}
Run Code Online (Sandbox Code Playgroud)
第一个问题:
即使我只将1个字节的内存分配给char指针str(calloc(1,'\0')),并且我将18个字节的字符串复制mystring0123456789到其中,并且它没有抛出任何错误,并且程序在没有任何SEGFAULT的情况下工作正常.
为什么我的程序没有抛出错误?理想情况下它应该抛出一些错误,因为它没有任何内存来存储那个大字符串.有人可以对此有所了解吗?
该程序运行完美,并给我输出Reverse …
例如,假设我有一个Game类:
class Game{
public:
Game();
~Game();
void CreateWindowClass(HINSTANCE);
void CreateRessources(HINSTANCE);
void ShowMainScreen();
Winsock* CreateWinsock();
MessageLog* CreateMessageLog();
D2DResources* CreateD2DResources(HWND);
HWND Getm_hWnd();
public:
D2DResources* pD2DResources;
Winsock* pWinsock;
MessageLog* pMessageLog;
private:
HWND m_hWnd;
};
Run Code Online (Sandbox Code Playgroud)
而Game中的3个指针分配如下:
Winsock* Game::CreateWinsock()
{
pWinsock = new Winsock;
return pWinsock;
}
Run Code Online (Sandbox Code Playgroud)
这会导致任何问题吗?另外,我会删除动态创建的对象,如下所示:delete pWinsock;?
我正在使用c#(.NET)中的套接字项目.我正在使用某些类(数据包)处理数据.当我正在寻找内存使用时,如果数据传入,它就会上升!即创建类.如何从内存中删除(手动)类和未使用的变量/类(不使用GC!)?
如果我尝试基本的东西,比如只接收数据,它就会再次上升.此时,我想完全从内存中删除/删除类/变量!
有人可以帮忙吗?
我正面临一个问题,我当然做错了什么.我需要调用一个返回指向int数组的指针的函数,但是当它返回后,数组内的值是错误的,并且缺少一些值.
int* patternForFirstDigit(int digit) {
int *pattern;
pattern = (int [6]){1,1,1,1,1,1};
switch (digit) {
case 0:
pattern = (int [6]){1,1,1,1,1,1};
break;
case 1:
pattern = (int [6]){1,1,2,1,2,2};
break;
default:
pattern = (int [6]){0,0,0,0,0,0};
break;
}
for (int i = 0; i < 6; i++) {
printf("%i\n", pattern[i]);
}
return pattern;
}
Run Code Online (Sandbox Code Playgroud)
如果是数字= 1,这是打印的内容
1, 1, 2, 1, 2, 2
Run Code Online (Sandbox Code Playgroud)
但回来后
int *pattern = patternForFirstDigit(0);
for (int i = 0; i < 6; i++) {
printf("%i\n", pattern[i]);
}
Run Code Online (Sandbox Code Playgroud)
这是什么印刷品
1, -1405451528, …Run Code Online (Sandbox Code Playgroud) 所以我正在为一个类的MySQL数据库创建一个客户端程序,我在表单类的顶部声明了一些变量,我在表单的整个生命周期中使用和重用.每次使用变量时,我只是做了类似的事情:
variableName = new VariableClass();
Run Code Online (Sandbox Code Playgroud)
然后使用它,主要使用DataSet/Tables.我想知道的是我应该在再次调用new之前明确释放内存还是C#为我处理这个问题?