小编Fir*_*oft的帖子

"免费"的冲突类型

我收到了错误

'免费'的冲突类型

free()下面的功能调用.

int main ( )
{
    char fx [] = "x^2+5*x-1";
    node * fxNode = buildTree(fx, sizeof(fx)/sizeof(char));
    printf(deriveFromTree(fxNode)); // Should print "2*x+5"
    free(fxNode);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

无法弄清楚为什么.不确定这件事,但上面的内容是什么

#include <stdio.h>

char opstack [5] = {'+','-','*','^', '\0'};

unsigned short int lowerOpPrecedence ( char, char, char * );

int stringToUnsignedInt ( char *, unsigned int * );
int stringToDouble ( char * , double * );
unsigned short int stringCompare ( char * , char * );
void stringCopy …
Run Code Online (Sandbox Code Playgroud)

c free

4
推荐指数
1
解决办法
4158
查看次数

C中"size_t"的等价物是什么?

假设我想做一个像这样的函数

int indexOf ( char * str, char c )
{
   // returns the index of the chracter c in the string str 
   // returns -1 if c is not a character of str
  int k = 0;  
  while (*str)
  { 
      if (*str == c) break;
      else ++str;
  }
  return *str ? k : -1;  
}
Run Code Online (Sandbox Code Playgroud)

但我希望尽可能让它变得可靠.例如,只有在int保证最大值大于或等于字符数组的最大大小时,上述方法才有效.如何在纯C中覆盖我的所有基础?

c memory arrays

1
推荐指数
1
解决办法
1014
查看次数

为什么可以释放/删除返回的对象,但是不能释放/删除通过参数输入的对象?

据我所知,

int * createArray ( void )
{
     int * arr = (int*)malloc(3*sizeof(int));
     arr[0] = 69; arr[1] = 69; arr[2]; 
     return arr;
}

int main ()
{
    int * myArray = createArray();
    free myArray;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

将释放数组的所有内存{69, 69, 69}在指向的内存地址myArray,但是

void freeArray ( int * A )
{
     free A;
}

int main ()
{
    int * myArray = (int*)malloc(3*sizeof(int));
    myArray[0] = 69; arr[1] = 69; arr[2] = 69; 
    freeArray(myArray);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不会做同样的事情.这让我感到困惑的原因是因为在这两种情况下你都在处理原始指针的副本,但是从该副本中删除指向的对象仅适用于第一种情况.这似乎是一种不一致,但也许我完全错了.有人可以为我清除这个吗?

c memory-management

-7
推荐指数
1
解决办法
152
查看次数

标签 统计

c ×3

arrays ×1

free ×1

memory ×1

memory-management ×1