我一直在尝试编写一个最短路径算法,dijkstras算法,找到前两个顶点的最短路径工作正常.我在尝试清除链表和优先级队列时遇到了问题.
class llNode {
public:
int id;
int source;
int weight;
llNode* next;
llNode(int key, int distance, int from) {
id=key;
weight=distance;
source=from;
next = NULL;
}
};
class lList {
private:
llNode* root;
llNode* end;
void clearAll(llNode* toClear);
public:
lList() {
root = NULL;
}
void add(llNode* toAdd) {
if ( root == NULL) {
root = toAdd;
end = toAdd;
return;
}
end->next = toAdd;
end=end->next;
}
bool isFound(int key) {
for(llNode* ii= root; ii != NULL ; …Run Code Online (Sandbox Code Playgroud) 哪一行是定义指针的正确(最佳)方式?
typedef ptrdiff_t pointer; // pointers are ptrdiff_t.
-- or --
typedef void* pointer; // pointers are void*.
pointer ptr = malloc(1024);
Run Code Online (Sandbox Code Playgroud) 看看这个伪代码:
void* magicpointer = malloc(OVER_NINE_THOUSAND);
NSValue* v = [NSValue valueWithPointer:magicpointer];
[v release];
Run Code Online (Sandbox Code Playgroud)
当v被释放时,magicpointer也会被释放,或者我必须手动执行吗?我正在使用手动引用计数.
这有效:
MyObject *o;
o = new MyObject();
Run Code Online (Sandbox Code Playgroud)
而这不是:
MyObject o = new MyObject();
Run Code Online (Sandbox Code Playgroud)
为什么?
我需要从函数返回一个类对象数组.我从研究中了解到,最好的方法是使用指针,但这是我的程序设计的最佳方法,还需要从多个CPP文件中访问它?
main.cpp中
#include <class.h>
#include <functions.h>
int main(){
Class Object[2][]; //define second dimension here?
some_function(); //should return / create the array with filled in elements.
int var = arr[2][3]; // want to be able to do something like this in main
}
Run Code Online (Sandbox Code Playgroud)
functions.cpp
void some_function(){
// assign values
arr[2][3] = 1;
}
Run Code Online (Sandbox Code Playgroud) 我检查了每一行,但找不到我忘记删除的地方.我在这个网站上找到AllocateDynamicArray并FreeDynamicArray编码,并认为它是正确的.我将尽快提供valgrind输出.任何帮助将不胜感激.
template <typename T>
T **AllocateDynamicArray(int nRows, int nCols) {
T **dynamicArray;
dynamicArray = new T*[nRows];
for (int i = 0; i < nRows; i++) {
dynamicArray[i] = new T [nCols];
for (int j = 0; j < nCols; j++) {
dynamicArray[i][j] = 0;
}
}
return dynamicArray;
}
template <typename T>
void FreeDynamicArray(T** dArray, int nRows) {
for (int i = 0; i < nRows; i++) {
delete[] dArray[i];
}
delete[] dArray;
}
int main(int …Run Code Online (Sandbox Code Playgroud) 当我将Iterator附加到字符串时,我遇到了一些意外的字符串行为.基本上,我有一个文件,读取的内容如下:
int x := 10;
print x;
Run Code Online (Sandbox Code Playgroud)
我有一个字符串已经包含这个文件的内容,我正在迭代它,只是现在删除空格.
void Lexer::parse()
{
Pointer = Filestring.begin(); // both private members
while(Pointer < Filestring.end())
{
if(is_whitespace(0)) // 0 indicates current Pointer position
{
advance(Pointer, 1);
continue;
}
CurToken.append(&*Pointer); // CurToken is private member string
advance(Pointer, 1);
}
cout << CurToken << endl;
}
Run Code Online (Sandbox Code Playgroud)
在循环结束时,我希望CurToken是一个字符串,只包含删除了所有空格的字符.相反,我得到以下内容:
int x := 1 + 2;
print x;
nt x := 1 + 2;
print x;
t x := 1 + 2;
print x;
Run Code Online (Sandbox Code Playgroud)
...
rint x; …Run Code Online (Sandbox Code Playgroud) 我已经编写了一个函数Reverse来使用不安全上下文中的指针反转.net中的字符串.我喜欢这个.
我分配"问候"和"x"相同的值.我反向问候我的意外x也被逆转了.
using System;
class Test{
private unsafe static void Reverse(string text){
fixed(char* pStr = text){
char* pBegin = pStr;
char* pEnd = pStr + text.Length - 1;
while(pBegin < pEnd){
char t = *pBegin;
*pBegin++ = *pEnd;
*pEnd-- = t;
}
}
}
public static void Main(){
string greet = "Hello World";
string x = "Hello World";
Reverse(greet);
Console.WriteLine(greet);
Console.WriteLine(x);
}
}
Run Code Online (Sandbox Code Playgroud) 我有这个代码,它不适合我.它不会给出任何错误或警告.所以我不知道它有什么问题.我对结构中的指针不太熟悉,我甚至不知道代码的那一部分是否导致它不能运行.
我已经使用了Code :: Blocks和DevC++来编译它,但它们都没有任何不同.
它有点长但它只有3个功能.根本没有任何东西可以打印到屏幕上.
#include <stdio.h>
#include <stdlib.h>
struct foo{
int num;
char *word;
struct foo *ptr;
};
void func1(struct foo);
void func2(struct foo*);
void func3(struct foo);
int main() {
struct foo a;
a.num = 5;
a.word ="myword";
func1(a);
printf("1 %d %s\n", a.num, a.word);
a.num = 100;
a.word = "secondword";
func2(&a);
printf("2 %d %s\n", a.num, a.word);
a.ptr = &a;
a.num = 50;
a.word = "mylastword";
func3(a);
printf("4 %d %s\n", a.num, a.word);
}
void func1(struct foo a)
{
while(*(a.word) != …Run Code Online (Sandbox Code Playgroud) 我有这门课:
class GameData
{
public:
GameData();
~GameData();
vector<Bullet> bullets;
}
Run Code Online (Sandbox Code Playgroud)
在主程序中,我创建了一个GameData指针并为new分配内存.我知道新的,你也应该删除数据.我上面的矢量不是指向子弹的指针向量,只是子弹本身(它们应该是指针吗?)在~GameData()函数中,我需要清除子弹?我应该确定它是空的,如果不清楚的话?为了良好的内存管理,正确"删除"它的具体方法是什么?如果我的设计有误,请告诉我正确处理此问题的方法.
谢谢
pointers ×10
c++ ×6
c ×2
string ×2
.net ×1
arrays ×1
c89 ×1
clear ×1
dynamic ×1
function ×1
iterator ×1
linked-list ×1
memory-leaks ×1
new-operator ×1
nsvalue ×1
object ×1
objective-c ×1
struct ×1
unsafe ×1
vector ×1