有人可以帮我弄清楚我在哪里得到这个错误。 我知道它可能是双重删除或类似的东西。 对于背景,这是huffman树的一个实现,你可以在维基百科上轻松实现。 CharCountNode类实现 int main() { ifstream input; input.open(“input.txt”); MinPriorityQueue heap; map m; while(input.good()) m[input.get()] += 1; for( map::const_iterator it = m.begin(); it != m.end(); ++it ) heap.enqueue(CharCountNode(it->first, it->second)); while(heap.getSize() > 1) { CharCountNode a, b, parent; a = heap.dequeue(); b = heap.dequeue(); parent = CharCountNode(‘*’, a.getCount() + b.getCount()); parent.left = &a; parent.right = […]
在function pointers , 如果函数指针被赋值为添加函数(*fptr)(int a, int b)为什么(*fptr)(int a, int b)与(fptr)(int a, int b)相同? int (*fptr)(int ,int) = add; while add(int a , int b) returns sum of two numbers.
我有以下多项选择题,我无法弄清楚为什么(A)和(C)不正确,任何解释都将不胜感激! 以下问题中唯一正确的答案是(B)。 Which of the following is a correct usage of scanf? (A) int i=0; scanf(“%d”, i); (B) int i=0; int *p=&i; scanf(“%d”, p); (C) char *s=”1234567″; scanf(“%3s”, &s); (D) char c; scanf(“%c”, c);
有什么区别: //Example of “Complicated Array Declarations” from C++ Primer int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int (*Parr)[10] = &arr; 和: int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int *Parr = arr; 两者都是指向整数数组的指针 。 但是为了在第一个片段中访问arr的第一个元素,我必须做**Parr而在第二个,我只需要取消引用一次*Parr
一个class轮问题: 有人可以解释为什么thisNode=NULL在函数中不起作用以及如何以其他方式实现相同的结果。 介绍: 在我开始研究数据结构时,我最近开始使用指针构建了很多。 历史: 我编写了堆栈,队列,二叉搜索树和表达式树,并将很快开始编写avl树。 作为一名学生,我仍然没有意识到许多概念,并希望得到任何帮助。 方法: 我总是找到其他方法来实现我所需的结果(使头节点归零),比如在main函数中将其置零,或者最终不将它归零并将其保持为具有空数据的头/根节点,然后添加其他(有用的)节点。 (仅用作头部或指向结构的指针) 混乱: 我不明白为什么在函数中对指向struct的指针归零不起作用,但是更改结构数据成员的值之类的其他事情也没有问题。 例如: thisNode->nextNode->data = thisNode->data; *//this does works* thisNode = NULL; *//this doesn’t work* 图片: 题: 有人可以解释为什么thisNode=NULL在函数中不起作用以及如何以其他方式实现相同的结果。 问题领域: void stackPop(stackNode *headNode){ if (headNode!=NULL){ if (headNode->nextNode!=NULL){ stackNode *tempNode = getLatestStackNode(headNode); tempNode->prevNode->nextNode=NULL; tempNode->prevNode==NULL; tempNode->data==’.’; tempNode=NULL; free(tempNode); }else if (headNode->nextNode==NULL){ headNode->data=’\0′; headNode = NULL; free(headNode); } }else{ […]
#include main() { int *num2=20; printf(“\n\n\n%d”,num2); } 当我按原样运行时,它打印20 。 如果我使用*num2 ,则会导致分段错误。 为什么?
我一直试图将一些struct(我定义的)类型变量连接成一个更大的变量。 我得到的基本上是这样的: 我有一个struct和两个struct **类型的变量。 我声明第三个结构C,我想将A和B连接成C.我尝试的是这样的(我现在没有代码在我面前所以我会写一些与某些名字非常相似的东西改变,因为我不记得他们。 struct** A, B; struct** C; (我知道A和B,因为我通过调用另一个函数接收它们) 我像这样为C分配内存。 C = (struct**)malloc(sizeof(A)+sizeof(B)); 我用这样的memcpy移动A和B. memcpy(&C, &A, sizeof(A)); memcpy(&C + sizeof(A), &C, sizeof(B)); 显而易见的是,我所做的并不正确,因为看起来所有这些C只包含A.我很确定问题来自“**”,我无法处理好指针的指针。 有人可以就我的问题给我一些建议吗? 我也不想使用Handles,我必须使用memcpy / memmove。 [评论更新:] 我的结构都是相同的类型。
我现在自己纠正了这个程序。 这仍然是 – 回答的问题:我有一个二维数组的字符,每个数组都包含一个字。 我逐字逐句地将char*与一个函数分开,将它们放在数组中。 我的问题是它不打印单词而是随机字符。 可能是指针问题? 我不确定char*[20]到char[][20]的转换,因为我想过滤char*spamArray[20]到char[][20] 我需要将char*[20]传递给具有参数char[][20]的filter。 这是电话: char* spam = “this is a string”; //spam isn’t actually initialized this way, but this is just for explaining what it contains //OLD QUESTION CODE:char (*spamArray)[20] = (char(*)[20])malloc((sizeof(char) * 20) * nSpam); //new: char spamArray[nSpam][20]; //nSpam is the number of words splitstring(spam, &spamArray[0], nSpam); 这是函数splitstring成单词 […]
目前我正在开发一个程序,允许用户输入一个字符串然后进行标记化,然后使用指针数组将标记打印到屏幕上。 通过调用我的tokenize函数来“执行”这个操作,该函数读取输入字符串直到第一个分隔符(”,’,’,’。’,’?’,’!’)。 然后它将我的字符串中的分隔符更改为NULL char。 然后它应该返回一个指向我的字符串中的下一个字符的指针。 在输入字符串之后的main中,它应该继续调用tokenize函数,该函数返回指针,然后存储在指针数组中以便稍后打印我的标记。 一旦tokenize()返回一个指向NULL字符的指针,该字符位于我的字符串的末尾,它就会从该循环中断开。 然后我使用我的指针数组打印出令牌。 //试图详细说明 #include #include char *tokenize ( char *text, const char *separators ); int main ( void ) { char text[30]; char separators[6] = { ‘ ‘,’.’,’,’,’?’,’!’,’\0′}; char *pch = NULL; int tokens[15]; int i = 0; int j = 0; printf(“Enter a string: \n”); fgets( text, 30, […]
我有一段记忆,我正在“守卫”,定义为 typedef unsigned char byte; byte * guardArea; size_t guardSize; byte * guardArea = getGuardArea(); size_t guardSize = getGuardSize(); 为此目的可接受的实现是: size_t glGuardSize = 1024; /* protect an area of 1kb */ byte * getGuardArea() { return malloc( glGuardSize ); } size_t getGuardSize() { return glGuardSize; } 以下代码段可以为任何指针(来自不同的malloc,来自堆栈等)返回true吗? if ( ptr >= guardArea && ptr < […]