此代码导致分段错误:
int main(){
char *p;
char a[50] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
p = (char *)malloc(50*sizeof(char));
if(!p){
cout << "Allocation Failure";
cout << "\n";
}
else{
cout << "Allocation Success";
cout << "\n";
p = a;
cout << p;
cout << "\n";
free(p);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
执行该程序后的输出是:
Allocation Success
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
我无法找到错误.可能是什么原因?
Oli*_*rth 12
这个:
p = a;
Run Code Online (Sandbox Code Playgroud)
复制指针,而不是指向内存的内容. p现在指向数组的第一个元素a.所以当你这样做的时候free(p),你正试图释放一个没有任何意义的非动态数组.1
您应该调查strncpy()复制字符串.
pb2*_*b2q 10
您正在调用free未使用其中一种malloc方法分配的内存块.
执行此操作时:p = a您将分配给p堆栈数组使用的内存a.该内存未使用分配malloc,因此无法使用它free.
此外,通过重新分配,您将malloc无法跟踪最初分配和分配的块p,从而导致内存泄漏.
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |