gpt4 book ai didi

c - 从函数返回的自由数组

转载 作者:行者123 更新时间:2023-11-30 18:35:33 26 4
gpt4 key购买 nike

如果这出现在其他地方,我深表歉意,我无法找到明确的答案。我一直在使用 Ed S 的答案,选项 1(下面链接)来分配内存,填充数组,然后将其返回给调用者。他建议在使用完内存后释放内存,但是当我添加 free() 行时,我得到了核心转储。我已经研究过 GDB,但我的技能可能达不到需要的水平。

预先感谢您提供的任何帮助。

答案链接:Returning an array using C

代码:

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

char * createArray();

int main(int argc, char *argv[]){
printf("Creating Array...\n");
// pointer to an int
char *p;
// size of the array
int i,j;
// width of array
int width = 7;
// height of array
int height = 5;
// get an array from the function
p = createArray(width, height);
// check if p was created properly
if (p){
// print out the array
for (i = 0; i < width; ++i){
for (j = 0; j < height; ++j){
printf("[%c] ", *(p + (i * width) + j));
}
printf("\n");
}

// here's where it hits the fan
free(p);
}
return 0;
}

char * createArray(int w, int h){
// allocate some memory for the array
char *r = malloc(w * h * sizeof(char));
// check if the memory allocation was successful
if(!r){
return NULL;
}
int i, j;
int count = 0;
for (i = 0; i < w; ++i){
for (j = 0; j < h; ++j){
*(r + (i * w) + j) = 'X';
++count;
}
}
return r;
}

最佳答案

有了这个

char *r = malloc(w * h * sizeof(char));

您分配w * h(7 * 5 = 35 字节)的内存。但是

        *(r + (i * w) + j) = 'X';

可以访问远远超出您分配的 35 个字节(如果您在循环中测试 i * w + j 的可能值,您将会看到),从而导致未定义的行为。

这可能会覆盖 malloc 的内部数据结构,因此当您 free() 时,您碰巧会得到核心转储。

关于c - 从函数返回的自由数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46328472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com