已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。
昨天关门了。
Improve this question
由于以下代码中的free()函数,我收到了分段错误(Segfault)。
如何在此代码中使用free()函数而不接收分段错误?
#include <iostream>
#include <cstring>
using namespace std;
void driver_01(int* buf1, int buf1_size) {
int* buf2 = (int*)malloc(buf1_size);
//int* buf2 = new int(buf1_size);
memcpy(&buf2, &buf1, buf1_size);
int count = 0;
for (int i = 0; i < buf1_size; i++) {
if (*(buf2 + i) != 0) {
count++;
}
cout << *(buf2 + i) << endl;
}
cout << "Size of buf2: " << count << endl;
free(buf2);
}
int main() {
int buf1[8] = { 2, 6, 12, 15, 22, 30, 40, 50 };
int buf1_size = sizeof(buf1) / sizeof(buf1[0]);
cout << "Size of buf1: " << buf1_size << endl;
driver_01(buf1, buf1_size);
return 0;
}
输出:
Size of buf1: 8
2
6
12
15
22
30
40
50
Size of buf2: 8
Segmentation fault
2条答案
按热度按时间epggiuax1#
您对
malloc()
和memcpy()
的使用都是错误的。buf2
数组分配足够的内存,无法从buf1
数组复制值。您只分配了8个字节的空间,而不是8个int
。buf1
参数本身的地址,而不是它所指向的数组的地址)复制8个字节,而不是8个int
,并将它们写入错误的目标内存地址(buf2
变量本身的地址,而不是它所指向的数组的地址),因此您正在损坏内存。试试这个:
kiz8lqtg2#
你真正的问题在这里
你是说
但是正如其他人所说,你不能在c++中使用malloc或free,你应该使用new和delete。但是在这种情况下你应该使用std::vector
编辑。你的malloc也是错误的(谢谢Remy)。你需要