gpt4 book ai didi

C++ malloc 段错误

转载 作者:行者123 更新时间:2023-12-02 05:21:19 26 4
gpt4 key购买 nike

我对 malloc() 有疑问。真奇怪。我的代码如下。我使用随机生成器为数组生成元素。该数组由 malloc() 打开。如果数组大小小于 8192,则可以。如果大小大于 8192,则显示段错误。

void random_generator(int num, int * array) {

srand((unsigned)time(0));
int random_integer;
for(int index=0; index< num; index++){
random_integer = (rand()%10000)+1;
*(array+index) = random_integer;
cout << index << endl;
}
}

int main() {
int array_size = 10000;
int *input_array;
input_array = (int*) malloc((array_size));
random_generator(8192, input_array); // if the number is larger than 8192, segment fault
free(input_array);
}

最佳答案

malloc() 采用以字节为单位的大小,而不是元素的数量。 int 的大小通常为 4 个字节,因此您实际上只为 2500 个整数分配了足够的内存。您正在分配 array_size 字节,而您应该分配 array_size * sizeof(int) 字节。

所以,错误将被修复

input_array = (int*) malloc(array_size * sizeof(int));

附言永远不要假设您知道 int 或任何其他数据类型的大小,因为它取决于平台。始终使用 sizeof()

附言这确实是一道 C 题,而不是一道 C++ 题。如果您实际使用 C++,则应考虑使用 newdelete [] 而不是 malloc()free(),或者更好的是使用 std::vector 而不是数组,正如 Neil 指出的那样。

关于C++ malloc 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2740162/

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