相关疑难解决方法(0)

sizeof(数组)如何在运行时工作?

我已经读过C中的sizeof运算符在编译时被解释,因为在编译时编译器知道数组大小及其类型,sizeof能够计算array占用的字节数.但是sizeof如何处理以下代码:

 #include<stdio.h>
 #include<string.h>
 int main()
 {
    int n;
    scanf("%d",&n);
    int a[n];
    int s=sizeof(a);
    printf("%d",s);
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

这里的数组大小在编译时是不知道的,那么它是如何正常工作的?

c sizeof

24
推荐指数
3
解决办法
9312
查看次数

如何确定分配的C缓冲区的大小?

我有一个缓冲区,想要做一个测试,看看缓冲区是否有足够的容量,我可以找到我可以添加到缓冲区的元素数量.

char *buffer = (char *)malloc(sizeof(char) * 10);
Run Code Online (Sandbox Code Playgroud)

做一个

int numElements = sizeof(buffer); 
Run Code Online (Sandbox Code Playgroud)

不回10,有关如何实现这一点的任何想法?

c malloc buffer buffer-overflow

10
推荐指数
4
解决办法
5万
查看次数

为什么C中没有"memsize",它返回使用malloc在堆中分配的内存块的大小?

好.它可以在Visual Studio 中的_msize中调用.

但是为什么在使用malloc分配内存块的情况下,返回内存大小并不符合标准?因为我们无法判断malloc后面的返回指针指向了多少内存,所以我们可以使用这个"memsize"调用来返回我们需要的信息."memsize"将是特定于实现的,因为malloc/free

只是问,因为我必须在某个时候写一个包装器来存储大小的一些额外字节.

c memory-management

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

计算数组的长度给出了奇怪的结果

我试图找出一个数组的长度,但我得到奇怪的数字......

#include <stdio.h>
#include <stdlib.h>

const int numOfCoordinates = 100;

typedef struct {
    int x;
    int y;
    int counter;
} Coordinate;

Coordinate *coordinatesMainArray;
Coordinate endPoint;
Coordinate startPoint;


int main(int argc, const char * argv[])
{
    endPoint.x = 8;
    endPoint.y = 3;
    endPoint.counter = 0;

    startPoint.x = 1;
    startPoint.y = 4;

    coordinatesMainArray = malloc(sizeof(Coordinate) * 1);
    coordinatesMainArray[0] = endPoint;



    int a = sizeof(coordinatesMainArray);
    int b = sizeof(coordinatesMainArray[0]);
    int coordinatesMainArrayLength = (a / b);
Run Code Online (Sandbox Code Playgroud)

这是我的代码,直到部分我需要coordinateMainArray的长度.但我得到a = 8和b = 12.

我假设我会得到两个相似的大小,所以它显示我的数组中有一个元素.

我究竟做错了什么?

c

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

标签 统计

c ×4

buffer ×1

buffer-overflow ×1

malloc ×1

memory-management ×1

sizeof ×1